thermferm/server.c

changeset 592
ff30227c0903
parent 591
95cf33f8021f
child 594
1904badedf8f
--- a/thermferm/server.c	Thu May 09 16:40:17 2019 +0200
+++ b/thermferm/server.c	Thu May 09 17:01:56 2019 +0200
@@ -255,299 +255,6 @@
 
 
 
-/*
- * ARCHIVE DIR
- * ARCHIVE GET filename
- * ARCHIVE LOG filename
- * ARCHIVE HELP
- */
-int cmd_archive(char *buf)
-{
-    char		*opt, *param, *name = NULL, *filename = NULL, *logname = NULL, mbits[11], tstr[24];
-    DIR			*dd;
-    FILE		*fp;
-    struct dirent	*result;
-    ls_list		*lsx = NULL, *tmp;
-    struct stat		sbuf;
-    struct tm		*tbuf;
-    time_t		ftime;
-    int			found;
-    units_list		*unit;
-
-
-    opt = strtok(buf, " \0");
-    opt = strtok(NULL, " \0");
-
-    if (opt == NULL) {
-	srv_send((char *)"501 Subcommand missing");
-	return 0;
-    }
-    param = strtok(NULL, "\0");
-
-    if (strcmp(opt, (char *)"HELP") == 0) {
-	srv_send((char *)"100 Help text follows:");
-	srv_send((char *)"Recognized commands:");
-	srv_send((char *)"ARCHIVE DIR                   Archived logfiles directory");
-	srv_send((char *)"ARCHIVE GET filename          Archived logfile download");
-	srv_send((char *)"ARCHIVE LOG filename          Archived logfile data in graphsteps");
-	srv_send((char *)".");
-	return 0;
-    }
-
-    if (strcmp(opt, (char *)"DIR") == 0) {
-
-	if (getenv((char *)"USER") == NULL) {
-	    name = xstrcpy((char *)"/root");
-	} else {
-	    name = xstrcpy(getenv((char *)"HOME"));
-	}
-	name = xstrcat(name, (char *)"/.thermferm/log/");
-
-	if ((dd = opendir(name))) {
-	    for (;;) {
-		if  (! (result = readdir(dd))) {
-		    syslog(LOG_NOTICE, "readdir: error=%d", errno);
-		    break;
-		}
-		if (result->d_name[0] != '.') {
-		    filename = xstrcpy(name);
-		    filename = xstrcat(filename, result->d_name);
-		    /*
-		     * Remove files from the list when they are in use
-		     */
-		    found = 0;
-		    for (unit = Config.units; unit; unit = unit->next) {
-			if (unit->mode != UNITMODE_OFF) {
-			    logname = xstrcpy(unit->product_code);
-			    logname = xstrcat(logname, (char *)" ");
-			    logname = xstrcat(logname, unit->product_name);
-			    logname = xstrcat(logname, (char *)".log");
-			    if (! strcmp(result->d_name, logname))
-				found = 1;
-			    free(logname);
-			    logname = NULL;
-			}
-		    }
-		    if ((found == 0) && ((stat(filename, &sbuf)) == 0)) {
-		        fill_list(&lsx, result->d_name, sbuf.st_mode, sbuf.st_size, sbuf.st_mtime);
-		    }
-		    free(filename);
-		    filename = NULL;
-		}
-	    }
-	    closedir(dd);
-	} else {
-	    syslog(LOG_NOTICE, "opendir: \"%s\" error=%d", name, errno);    
-	}
-
-	sort_list(&lsx);
-
-	srv_send((char *)"212 Archive directory follows:");
-	for (tmp = lsx; tmp; tmp = tmp->next) {
-	    sprintf(mbits, "----------");
-	    if (tmp->mode & S_IRUSR)
-		mbits[1] = 'r';
-	    if (tmp->mode & S_IWUSR)
-		mbits[2] = 'w';
-	    if (tmp->mode & S_IXUSR)
-		mbits[3] = 'x';
-	    if (tmp->mode & S_IRGRP)
-		mbits[4] = 'r';
-	    if (tmp->mode & S_IWGRP)
-		mbits[5] = 'w';
-	    if (tmp->mode & S_IXGRP)
-		mbits[6] = 'x';
-	    if (tmp->mode & S_IROTH)
-		mbits[7] = 'r';
-	    if (tmp->mode & S_IWOTH)
-		mbits[8] = 'w';
-	    if (tmp->mode & S_IXOTH)
-		mbits[9] = 'x';
-	    ftime = tmp->mtime;
-	    tbuf = localtime(&ftime);
-	    sprintf(tstr, "%02d %s %04d %02d:%02d", tbuf->tm_mday, MONTH[tbuf->tm_mon], tbuf->tm_year+1900, tbuf->tm_hour, tbuf->tm_min);
-	    srv_send((char *)"%s,%s,%d,%s", tmp->d_name, mbits, tmp->size, tstr);
-	}
-	srv_send((char *)".");
-	tidy_lslist(&lsx);
-
-	free(name);
-	name = NULL;
-	return 0;
-    }
-
-    if (param == NULL) {
-	srv_send((char *)"502 Parameter missing");
-	return 0;
-    }
-
-    if (strcmp(opt, (char *)"GET") == 0) {
-	if (getenv((char *)"USER") == NULL) {
-	    name = xstrcpy((char *)"/root");
-	} else {
-	    name = xstrcpy(getenv((char *)"HOME"));
-	}
-	name = xstrcat(name, (char *)"/.thermferm/log/");
-	name = xstrcat(name, param);
-
-	if ((fp = fopen(name, "r"))) {
-	    char	buffer[256];
-
-	    srv_send((char *)"212 Archive file follows:");
-	    while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
-		int	i;
-
-		for (i = 0; i < strlen(buffer); i++) {
-		    if (buffer[i] == '\n')
-			buffer[i] = '\0';
-		    if (buffer[i] == '\r')
-			buffer[i] = '\0';
-		}
-		srv_send(buffer);
-	    }
-	    srv_send((char *)".");
-	    fclose(fp);
-	} else {
-	    srv_send((char *)"440 No such file");
-	}
-
-	free(name);
-	name = NULL;
-	return 0;
-    }
-
-    if (strcmp(opt, (char *)"LOG") == 0) {
-	if (getenv((char *)"USER") == NULL) {
-	    name = xstrcpy((char *)"/root");
-	} else {
-	    name = xstrcpy(getenv((char *)"HOME"));
-	}
-	name = xstrcat(name, (char *)"/.thermferm/log/");
-	name = xstrcat(name, param);
-
-	if ((fp = fopen(name, "r"))) {
-	    char        buffer[256], outbuf[256], q[5], hr[3];
-	    char	*date_n, *mode_n, *air_n, *beer_n, *target_lo_n, *target_hi_n, *heater_n, *cooler_n, *room_n, *chiller_n;
-	    char	*heater_u, *cooler_u;
-	    int		lines = 0, heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, graphstep = 0;
-	    float	room_t = 0.0;
-
-	    srv_send((char *)"212 Logfile list follows:");
-	    while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
-		lines++;
-	    }
-	    fseek(fp, 0L, SEEK_SET);
-	    /*
-	     * We have counted the lines in the logfile including the header lines.
-	     * The header lines should be ignored but there are so few of them, we
-	     * just include them in the total.
-	     * Now find a reasonable interval of lines to sent to the client.
-	     */
-	    for (graphstep = 1; graphstep <= MAX_INTERVALS; graphstep++) {
-		if (lines < GRAPH_DATALINES[graphstep]) {
-		    break;
-		}
-	    }
-	    if (graphstep > MAX_INTERVALS)
-		graphstep = MAX_INTERVALS;
-	    syslog(LOG_NOTICE, "ARCHIVE LOG %s: lines=%d, interval=%d, graphstep=%d", param, lines, GRAPH_INTERVAL[graphstep], graphstep);
-
-	    while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
-		/*
-		 * 2014-11-15 18:39,BEER,20.312,19.750,20.0,0,NA,NA,NA,78105,NA,NA,18.000,20.1,5.312
-		 *       |           |     |      |     |   | |  |  |    |   |  |    |     |    |
-		 *  date_n           |     |      |     |   | |  |  |    |   |  |    |     |    |
-		 *  mode_n ----------+     |      |     |   | |  |  |    |   |  |    |     |    |
-		 *  air_n -----------------+      |     |   | |  |  |    |   |  |    |     |    |
-		 *  beer_n -----------------------+     |   | |  |  |    |   |  |    |     |    |
-		 *  target_lo_n ------------------------+   | |  |  |    |   |  |    |     |    |
-		 *  heater_n -------------------------------+ |  |  |    |   |  |    |     |    |
-		 *  cooler_n ---------------------------------+  |  |    |   |  |    |     |    |
-		 *  not used ------------------------------------+  |    |   |  |    |     |    |
-		 *  not used ---------------------------------------+    |   |  |    |     |    |
-		 *  heater_u --------------------------------------------+   |  |    |     |    |
-		 *  cooler_u ------------------------------------------------+  |    |     |    |
-		 *  not used ---------------------------------------------------+    |     |    |
-		 *  room_n ----------------------------------------------------------+     |    |
-		 *  target_hi_n -----------------------------------------------------------+    |
-		 *  chiller_n ------------------------------------------------------------------+
-		 */
-		hr[0] = q[0] = buffer[11];
-		hr[1] = q[1] = buffer[12];
-		q[2] = buffer[14];
-		q[3] = buffer[15];
-		hr[2] = '\0';
-		buffer[strlen(buffer) -1] = '\0';
-		date_n = strtok(buffer, ",\0"); 	/* timestamp            */
-		mode_n = strtok(NULL, ",\0");   	/* unit mode            */
-		air_n = strtok(NULL, ",\0");    	/* air temp             */
-		beer_n = strtok(NULL, ",\0");   	/* beer temp            */
-		target_lo_n = strtok(NULL, ",\0");	/* target low temp	*/
-		heater_n = strtok(NULL, ",\0"); 	/* current heater state */
-		cooler_n = strtok(NULL, ",\0"); 	/* current cooler state */
-		heater_u = strtok(NULL, ",\0"); 	/* current fan state    */
-		heater_u = strtok(NULL, ",\0"); 	/* current door state   */
-		heater_u = strtok(NULL, ",\0"); 	/* heater use counter   */
-		cooler_u = strtok(NULL, ",\0"); 	/* cooler use counter   */
-		room_n = strtok(NULL, ",\0");		/* fan use counter	*/
-		room_n = strtok(NULL, ",\0");		/* room temperature	*/
-		target_hi_n = strtok(NULL, ",\0");	/* target high temp	*/
-		chiller_n = strtok(NULL, ",\0");	/* chiller temp		*/
-
-		if (strncmp(mode_n, (char *)"Mode", 4)) {
-		    /*
-		     * Output a line at the right intervals
-		     */
-		    int hour = atoi(hr);
-		    if (((graphstep == 1)) ||
-			((graphstep == 2) && (q[3] == '0' || q[3] == '5')) ||
-			((graphstep == 3) && ((q[2] == '0' && q[3] == '0') || (q[2] == '1' && q[3] == '5') || (q[2] == '3' && q[3] == '0') || (q[2] == '4' && q[3] == '5'))) ||
-			((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) ||
-			((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ||
-			((graphstep == 6) && (hour % 2 == 0) && (q[2] == '0' && q[3] == '0')) ||	/* 120 minutes	*/
-			((graphstep == 7) && (hour % 4 == 0) && (q[2] == '0' && q[3] == '0')) ||	/* 240 minutes	*/
-			((graphstep >= 8) && (hour % 8 == 0) && (q[2] == '0' && q[3] == '0')) ) {	/* 480 minutes	*/
-			heat_used = cool_used = 0;
-			if (heater_u && strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) {
-			    if (h && heater_l) {
-				heat_used = ((h - heater_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60);
-			    }
-			}
-			if (cooler_u && strcmp(cooler_u, "NA") && (sscanf(cooler_u, "%d", &c) == 1)) {
-			    if (c && cooler_l) {
-				cool_used = ((c - cooler_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60);
-			    }
-			}
-			if (room_n)
-			    sscanf(room_n, "%f", &room_t);
-			if (target_hi_n == NULL)
-			    target_hi_n = target_lo_n;
-			snprintf(outbuf, 255, "%s,%s,%s,%s,%s,%s,%s,%d,%d,%.1f,%s,%s", 
-				date_n, mode_n, air_n, beer_n, target_lo_n, heater_n, cooler_n, heat_used, cool_used, room_t,target_hi_n, chiller_n);
-			srv_send(outbuf);
-			if (heater_u && h && strcmp(heater_u, "NA"))
-			    heater_l = h;
-			if (cooler_u && c & strcmp(cooler_u, "NA"))
-			    cooler_l = c;
-		    }
-		}
-	    }
-
-	    srv_send((char *)".");
-	    fclose(fp);
-	} else {
-	    srv_send((char *)"440 No such file");
-	}
-
-	free(name);
-	name = NULL;
-    }
-
-    return 0;
-}
-
-
-
 int delete_Device(char *uuid)
 {
     devices_list	*current = Config.devices;
@@ -2419,10 +2126,7 @@
 	    /*
 	     * Process commands from the client
 	     */
-	    if (strncmp(buf, "ARCHIVE", 7) == 0) {
-		cmd_archive(buf);
-
-	    } else if (strncmp(buf, "DEVICE", 6) == 0) {
+	    if (strncmp(buf, "DEVICE", 6) == 0) {
 		if (cmd_device(buf))
 		    wrconfig();
 
@@ -2435,8 +2139,6 @@
 		srv_send((char *)"Recognized commands:");
 		srv_send((char *)"");
 //                                12345678901234567890123456789012345678901234567890123456789012345678901234567890
-		srv_send((char *)"ARCHIVE <CMD> [parameters]    Archive commands");
-		srv_send((char *)"ARCHIVE HELP                  Archive help screen");
 		srv_send((char *)"DEVICE <CMD> [parameters]     Device commands");
 		srv_send((char *)"DEVICE HELP                   Device help screen");
 		srv_send((char *)"GLOBAL <CMD> [parameters]     Global commands");

mercurial