Browse Source

Merge branch 'httpsrv' into bfgminer

Luke Dashjr 12 years ago
parent
commit
ba158b7f7d
1 changed files with 25 additions and 5 deletions
  1. 25 5
      driver-getwork.c

+ 25 - 5
driver-getwork.c

@@ -38,9 +38,6 @@ static
 pthread_mutex_t getwork_clients_mutex;
 pthread_mutex_t getwork_clients_mutex;
 
 
 // TODO: X-Hashes-Done?
 // TODO: X-Hashes-Done?
-// TODO: TUI manage username display
-// TODO: block getworks if disabled?
-// TODO: maybe reject known-stale shares?
 
 
 static
 static
 void prune_worklog()
 void prune_worklog()
@@ -163,17 +160,20 @@ int handle_getwork(struct MHD_Connection *conn, bytes_t *upbuf)
 	if (!client)
 	if (!client)
 	{
 	{
 		cgpu = malloc(sizeof(*cgpu));
 		cgpu = malloc(sizeof(*cgpu));
+		client = malloc(sizeof(*client));
 		*cgpu = (struct cgpu_info){
 		*cgpu = (struct cgpu_info){
 			.drv = &getwork_drv,
 			.drv = &getwork_drv,
 			.threads = 0,
 			.threads = 0,
+			.device_data = client,
+			.device_path = user,
 		};
 		};
 		if (unlikely(!create_new_cgpus(add_cgpu_live, cgpu)))
 		if (unlikely(!create_new_cgpus(add_cgpu_live, cgpu)))
 		{
 		{
+			free(client);
 			free(cgpu);
 			free(cgpu);
 			ret = getwork_error(conn, -32603, "Failed creating new cgpu", idstr, idstr_sz);
 			ret = getwork_error(conn, -32603, "Failed creating new cgpu", idstr, idstr_sz);
 			goto out;
 			goto out;
 		}
 		}
-		client = malloc(sizeof(*client));
 		*client = (struct getwork_client){
 		*client = (struct getwork_client){
 			.username = user,
 			.username = user,
 			.cgpu = cgpu,
 			.cgpu = cgpu,
@@ -215,6 +215,9 @@ int handle_getwork(struct MHD_Connection *conn, bytes_t *upbuf)
 		{
 		{
 			if (!submit_nonce(thr, work, nonce))
 			if (!submit_nonce(thr, work, nonce))
 				rejreason = "H-not-zero";
 				rejreason = "H-not-zero";
+			else
+			if (stale_work(work, true))
+				rejreason = "stale";
 			else
 			else
 				rejreason = NULL;
 				rejreason = NULL;
 			
 			
@@ -236,6 +239,12 @@ int handle_getwork(struct MHD_Connection *conn, bytes_t *upbuf)
 		goto out;
 		goto out;
 	}
 	}
 	
 	
+	if (cgpu->deven == DEV_DISABLED)
+	{
+		ret = getwork_error(conn, -10, "Virtual device has been disabled", idstr, idstr_sz);
+		goto out;
+	}
+	
 	{
 	{
 		const size_t replysz = 451 + idstr_sz;
 		const size_t replysz = 451 + idstr_sz;
 		
 		
@@ -265,8 +274,19 @@ out:
 	return ret;
 	return ret;
 }
 }
 
 
+#ifdef HAVE_CURSES
+static
+void getwork_wlogprint_status(struct cgpu_info *cgpu)
+{
+	struct getwork_client *client = cgpu->device_data;
+	wlogprint("Username: %s\n", client->username);
+}
+#endif
+
 struct device_drv getwork_drv = {
 struct device_drv getwork_drv = {
 	.dname = "getwork",
 	.dname = "getwork",
 	.name = "SGW",
 	.name = "SGW",
-// 	.get_api_stats = getwork_stats,
+#ifdef HAVE_CURSES
+	.proc_wlogprint_status = getwork_wlogprint_status,
+#endif
 };
 };