thermferm/server.c

changeset 266
07819a7ad3c1
parent 264
91c358556ecf
child 268
dda91dfa4aa8
equal deleted inserted replaced
265:63a003914b72 266:07819a7ad3c1
583 * LIST 583 * LIST
584 * LIST LOG 584 * LIST LOG
585 */ 585 */
586 int cmd_list(char *buf) 586 int cmd_list(char *buf)
587 { 587 {
588 char *opt, *param, *filename, q[2], buffer[256], *copy = NULL; 588 char *opt, *param, *filename, q[5], buffer[256], *copy = NULL;
589 char *mode_o = NULL, *mode_n, *target_o = NULL, *target_n, *heater_o = NULL, *heater_n, *cooler_o = NULL, *cooler_n; 589 char *mode_o = NULL, *mode_n, *heater_o = NULL, *heater_n, *cooler_o = NULL, *cooler_n;
590 units_list *unit; 590 units_list *unit;
591 FILE *fp; 591 FILE *fp;
592 592
593 opt = strtok(buf, " \0"); 593 opt = strtok(buf, " \0");
594 opt = strtok(NULL, " \0"); 594 opt = strtok(NULL, " \0");
610 if (param == NULL) { 610 if (param == NULL) {
611 srv_send((char *)"502 Parameter missing"); 611 srv_send((char *)"502 Parameter missing");
612 return 1; 612 return 1;
613 } 613 }
614 614
615 q[0] = q[1] = 'a'; 615 q[0] = q[1] = q[2] = q[3] = q[4] = 'a';
616 for (unit = Config.units; unit; unit = unit->next) { 616 for (unit = Config.units; unit; unit = unit->next) {
617 if (strcmp(param, unit->uuid) == 0) 617 if (strcmp(param, unit->uuid) == 0)
618 break; 618 break;
619 } 619 }
620 620
631 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { 631 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
632 buffer[strlen(buffer) -1] = '\0'; 632 buffer[strlen(buffer) -1] = '\0';
633 copy = xstrcpy(buffer); 633 copy = xstrcpy(buffer);
634 mode_n = strtok(buffer, ",\0"); 634 mode_n = strtok(buffer, ",\0");
635 mode_n = strtok(NULL, ",\0"); 635 mode_n = strtok(NULL, ",\0");
636 target_n = strtok(NULL, ",\0"); /* skip air_temp */ 636 heater_n = strtok(NULL, ",\0"); /* skip air_temp */
637 target_n = strtok(NULL, ",\0"); /* skip beer temp */ 637 heater_n = strtok(NULL, ",\0"); /* skip beer temp */
638 target_n = strtok(NULL, ",\0"); 638 heater_n = strtok(NULL, ",\0"); /* skip target temp */
639 heater_n = strtok(NULL, ",\0"); 639 heater_n = strtok(NULL, ",\0");
640 cooler_n = strtok(NULL, ",\0"); 640 cooler_n = strtok(NULL, ",\0");
641 641
642 if (strncmp(mode_n, (char *)"Mode", 4)) { 642 if (strncmp(mode_n, (char *)"Mode", 4)) {
643 if ((q[0] != buffer[11]) || (q[1] != buffer[12])) { 643 /*
644 * Output a line each 10 minutes or if something changes.
645 */
646 if ((q[0] != buffer[11]) || (q[1] != buffer[12]) || (q[3] != buffer[14])) {
644 q[0] = buffer[11]; 647 q[0] = buffer[11];
645 q[1] = buffer[12]; 648 q[1] = buffer[12];
649 q[2] = buffer[13];
650 q[3] = buffer[14];
646 srv_send(copy); 651 srv_send(copy);
647 } else if ((mode_o && strcmp(mode_o, mode_n)) || (target_o && strcmp(target_o, target_n)) || 652 } else if ((mode_o && strcmp(mode_o, mode_n)) ||
648 (heater_o && strcmp(heater_o, heater_n)) || (cooler_o && strcmp(cooler_o, cooler_n))) { 653 (heater_o && strcmp(heater_o, heater_n)) || (cooler_o && strcmp(cooler_o, cooler_n))) {
649 srv_send(copy); 654 srv_send(copy);
650 } 655 }
651 } 656 }
652
653 free(copy); 657 free(copy);
654 copy = NULL; 658 copy = NULL;
655 if (mode_o) 659 if (mode_o)
656 free(mode_o); 660 free(mode_o);
657 mode_o = xstrcpy(mode_n); 661 mode_o = xstrcpy(mode_n);
658 if (target_o)
659 free(target_o);
660 target_o = xstrcpy(target_n);
661 if (heater_o) 662 if (heater_o)
662 free(heater_o); 663 free(heater_o);
663 heater_o = xstrcpy(heater_n); 664 heater_o = xstrcpy(heater_n);
664 if (cooler_o) 665 if (cooler_o)
665 free(cooler_o); 666 free(cooler_o);
666 cooler_o = xstrcpy(cooler_n); 667 cooler_o = xstrcpy(cooler_n);
667 } 668 }
668 } 669 }
670 if (mode_o)
671 free(mode_o);
672 mode_o = NULL;
673 if (heater_o)
674 free(heater_o);
675 heater_o = NULL;
676 if (cooler_o)
677 free(cooler_o);
678 cooler_o = NULL;
669 free(filename); 679 free(filename);
670 filename = NULL; 680 filename = NULL;
671 srv_send((char *)"."); 681 srv_send((char *)".");
672 return 1; 682 return 1;
673 } 683 }

mercurial