| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -516,9 +516,6 @@ struct stratifier_data { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						mutex_t block_lock; | 
					 | 
					 | 
					 | 
						mutex_t block_lock; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						ckmsg_t *block_solves; | 
					 | 
					 | 
					 | 
						ckmsg_t *block_solves; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						/* Generator message priority */ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						int gen_priority; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						int proxy_count; /* Total proxies generated (not necessarily still alive) */ | 
					 | 
					 | 
					 | 
						int proxy_count; /* Total proxies generated (not necessarily still alive) */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						proxy_t *proxy; /* Current proxy in use */ | 
					 | 
					 | 
					 | 
						proxy_t *proxy; /* Current proxy in use */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						proxy_t *proxies; /* Hashlist of all proxies */ | 
					 | 
					 | 
					 | 
						proxy_t *proxies; /* Hashlist of all proxies */ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1120,21 +1117,6 @@ static void add_base(ckpool_t *ckp, sdata_t *sdata, workbase_t *wb, bool *new_bl | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						} | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void send_generator(ckpool_t *ckp, const char *msg, const int prio) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						sdata_t *sdata = ckp->sdata; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						bool set; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (prio > sdata->gen_priority) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							sdata->gen_priority = prio; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							set = true; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						} else | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							set = false; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						send_proc(ckp->generator, msg); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (set) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							sdata->gen_priority = 0; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void broadcast_ping(sdata_t *sdata); | 
					 | 
					 | 
					 | 
					static void broadcast_ping(sdata_t *sdata); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					/* Build a hashlist of all transactions, allowing us to compare with the list of
 | 
					 | 
					 | 
					 | 
					/* Build a hashlist of all transactions, allowing us to compare with the list of
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1806,7 +1788,7 @@ process_block(ckpool_t *ckp, const workbase_t *wb, const char *coinbase, const i | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						strcat(gbt_block, hexcoinbase); | 
					 | 
					 | 
					 | 
						strcat(gbt_block, hexcoinbase); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (wb->txns) | 
					 | 
					 | 
					 | 
						if (wb->txns) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							realloc_strcat(&gbt_block, wb->txn_data); | 
					 | 
					 | 
					 | 
							realloc_strcat(&gbt_block, wb->txn_data); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						send_generator(ckp, gbt_block, GEN_PRIORITY); | 
					 | 
					 | 
					 | 
						send_proc(ckp->generator, gbt_block); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						free(gbt_block); | 
					 | 
					 | 
					 | 
						free(gbt_block); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2295,7 +2277,7 @@ static void generator_recruit(ckpool_t *ckp, const int proxyid, const int recrui | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						sprintf(buf, "recruit=%d:%d", proxyid, recruits); | 
					 | 
					 | 
					 | 
						sprintf(buf, "recruit=%d:%d", proxyid, recruits); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						LOGINFO("Stratifer requesting %d more subproxies of proxy %d from generator", | 
					 | 
					 | 
					 | 
						LOGINFO("Stratifer requesting %d more subproxies of proxy %d from generator", | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							recruits, proxyid); | 
					 | 
					 | 
					 | 
							recruits, proxyid); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						send_generator(ckp, buf, GEN_PRIORITY); | 
					 | 
					 | 
					 | 
						send_proc(ckp->generator,buf); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					/* Find how much headroom we have and connect up to that many clients that are
 | 
					 | 
					 | 
					 | 
					/* Find how much headroom we have and connect up to that many clients that are
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -2801,7 +2783,7 @@ static void generator_drop_proxy(ckpool_t *ckp, const int64_t id, const int subi | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						char msg[256]; | 
					 | 
					 | 
					 | 
						char msg[256]; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						sprintf(msg, "dropproxy=%ld:%d", id, subid); | 
					 | 
					 | 
					 | 
						sprintf(msg, "dropproxy=%ld:%d", id, subid); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						send_generator(ckp, msg, GEN_LAX); | 
					 | 
					 | 
					 | 
						send_proc(ckp->generator,msg); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif | 
					 | 
					 | 
					 | 
					#endif | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -5217,7 +5199,7 @@ static void check_global_user(ckpool_t *ckp, user_instance_t *user, stratum_inst | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						sprintf(buf, "globaluser=%d:%d:%"PRId64":%s,%s", proxyid, user->id, client->id, | 
					 | 
					 | 
					 | 
						sprintf(buf, "globaluser=%d:%d:%"PRId64":%s,%s", proxyid, user->id, client->id, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							user->username, client->password); | 
					 | 
					 | 
					 | 
							user->username, client->password); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						send_generator(ckp, buf, GEN_LAX); | 
					 | 
					 | 
					 | 
						send_proc(ckp->generator,buf); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					/* Manage the response to auth, client must hold ref */ | 
					 | 
					 | 
					 | 
					/* Manage the response to auth, client must hold ref */ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -6438,7 +6420,7 @@ static void submit_transaction(ckpool_t *ckp, const char *hash) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (unlikely(!ckp->generator_ready)) | 
					 | 
					 | 
					 | 
						if (unlikely(!ckp->generator_ready)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return; | 
					 | 
					 | 
					 | 
							return; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						ASPRINTF(&buf, "submittxn:%s", hash); | 
					 | 
					 | 
					 | 
						ASPRINTF(&buf, "submittxn:%s", hash); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						send_generator(ckp, buf, GEN_LAX); | 
					 | 
					 | 
					 | 
						send_proc(ckp->generator,buf); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						free(buf); | 
					 | 
					 | 
					 | 
						free(buf); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -6666,7 +6648,7 @@ static void parse_remote_blocksubmit(ckpool_t *ckp, json_t *val, const char *buf | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							return; | 
					 | 
					 | 
					 | 
							return; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						} | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						LOGWARNING("Submitting possible downstream block!"); | 
					 | 
					 | 
					 | 
						LOGWARNING("Submitting possible downstream block!"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						send_generator(ckp, gbt_block, GEN_PRIORITY); | 
					 | 
					 | 
					 | 
						send_proc(ckp->generator, gbt_block); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void parse_remote_block(ckpool_t *ckp, sdata_t *sdata, json_t *val, const char *buf) | 
					 | 
					 | 
					 | 
					static void parse_remote_block(ckpool_t *ckp, sdata_t *sdata, json_t *val, const char *buf) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |