pool/stratum/client.h
Tanguy Pruvot 39d123a071 stratum: reduce client algo & socket struct size
to reduce a bit the memory usage... require a make clean!

+ prevent null/local ips from bans.
2017-12-17 07:25:25 +01:00

169 lines
3.6 KiB
C++

//struct YAAMP_SOURCE
//{
//public:
// int count;
// double speed;
//
// char ip[64];
//};
struct YAAMP_ALGO
{
char name[64];
YAAMP_HASH_FUNCTION hash_function;
double diff_multiplier;
double factor;
YAAMP_HASH_FUNCTION merkle_func;
double profit;
double rent;
bool overflow;
};
struct YAAMP_CLIENT_ALGO
{
double factor;
YAAMP_ALGO *algo;
};
#define YAAMP_JOB_MAXHISTORY 16
#define MIN_ADDRESS_LEN 30 /* BTC len can be as few as 26 chars, but gen. 33 or 34 */
#define MAX_ADDRESS_LEN 35 /* DCR */
class YAAMP_CLIENT: public YAAMP_OBJECT
{
public:
YAAMP_SOCKET *sock;
// YAAMP_SOURCE *source;
char notify_id[1024];
int64_t reqid; // ask request id
int created;
int last_best;
bool reconnectable;
bool reconnecting;
int userid;
int workerid;
int coinid;
bool logtraffic;
int id_int;
const char *id_str;
char version[1024];
char username[1024];
char password[1024];
char worker[1024];
double difficulty_actual;
double difficulty_remote;
double difficulty_written;
bool difficulty_fixed;
long long last_submit_time;
double shares_per_minute;
char extranonce1[32];
int extranonce2size;
char extranonce1_default[32];
int extranonce2size_default;
char extranonce1_last[32];
int extranonce2size_last;
char extranonce1_reconnect[32];
int extranonce2size_reconnect;
bool extranonce_subscribe;
int submit_bad;
double speed;
int extranonce1_id;
int jobid_next;
int jobid_sent;
int jobid_locked;
YAAMP_CLIENT_ALGO algos_subscribed[YAAMP_MAXALGOS];
int job_history[YAAMP_JOB_MAXHISTORY];
int64_t shares;
int stats;
int donation;
int broadcast_timeouts;
};
inline void client_delete(YAAMP_OBJECT *object)
{
YAAMP_CLIENT *client = (YAAMP_CLIENT *)object;
if (object == NULL) return;
socket_close(client->sock);
delete client;
object = NULL;
}
//////////////////////////////////////////////////////////////////////////
YAAMP_CLIENT *client_find_notify_id(const char *notify_id, bool reconnecting);
void get_next_extraonce1(char *extraonce1);
void get_random_key(char *key);
void client_sort();
void client_block_ip(YAAMP_CLIENT *client, const char *reason);
void client_block_ipset(YAAMP_CLIENT *client, const char *ipset_name);
bool client_reset_multialgo(YAAMP_CLIENT *client, bool first);
bool client_initialize_multialgo(YAAMP_CLIENT *client);
void client_add_job_history(YAAMP_CLIENT *client, int jobid);
bool client_find_job_history(YAAMP_CLIENT *client, int jobid, int startat=1);
bool client_find_my_ip(const char *ip);
//////////////////////////////////////////////////////////////////////////
int client_send_difficulty(YAAMP_CLIENT *client, double difficulty);
double client_normalize_difficulty(double difficulty);
void client_change_difficulty(YAAMP_CLIENT *client, double difficulty);
void client_record_difficulty(YAAMP_CLIENT *client);
void client_adjust_difficulty(YAAMP_CLIENT *client);
void client_initialize_difficulty(YAAMP_CLIENT *client);
//////////////////////////////////////////////////////////////////////////
int client_call(YAAMP_CLIENT *client, const char *method, const char *format, ...);
int client_ask(YAAMP_CLIENT *client, const char *method, const char *format, ...);
void client_dump_all();
int client_send_result(YAAMP_CLIENT *client, const char *format, ...);
int client_send_error(YAAMP_CLIENT *client, int error, const char *string);
bool client_ask_stats(YAAMP_CLIENT *client);
bool client_submit(YAAMP_CLIENT *client, json_value *json_params);
int client_workers_count(YAAMP_CLIENT *client);
int client_workers_byaddress(const char *username);
bool client_auth_by_workers(YAAMP_CLIENT *client);
void *client_thread(void *p);
void db_check_user_input(char* input);
//void source_prune();