thermferm/server.c

changeset 381
b22f8bf63b17
parent 380
75afd21885f2
child 389
584d40bb4b09
equal deleted inserted replaced
380:75afd21885f2 381:b22f8bf63b17
328 opt = strtok(buf, " \0"); 328 opt = strtok(buf, " \0");
329 opt = strtok(NULL, " \0"); 329 opt = strtok(NULL, " \0");
330 330
331 if (opt == NULL) { 331 if (opt == NULL) {
332 srv_send((char *)"501 Subcommand missing"); 332 srv_send((char *)"501 Subcommand missing");
333 return 1; 333 return 0;
334 } 334 }
335 param = strtok(NULL, "\0"); 335 param = strtok(NULL, "\0");
336 336
337 if (strcmp(opt, (char *)"HELP") == 0) { 337 if (strcmp(opt, (char *)"HELP") == 0) {
338 srv_send((char *)"100 Help text follows:"); 338 srv_send((char *)"100 Help text follows:");
421 srv_send((char *)"."); 421 srv_send((char *)".");
422 tidy_lslist(&lsx); 422 tidy_lslist(&lsx);
423 423
424 free(name); 424 free(name);
425 name = NULL; 425 name = NULL;
426 return 1; 426 return 0;
427 } 427 }
428 428
429 if (param == NULL) { 429 if (param == NULL) {
430 srv_send((char *)"502 Parameter missing"); 430 srv_send((char *)"502 Parameter missing");
431 return 1; 431 return 0;
432 } 432 }
433 433
434 if (strcmp(opt, (char *)"GET") == 0) { 434 if (strcmp(opt, (char *)"GET") == 0) {
435 if (getenv((char *)"USER") == NULL) { 435 if (getenv((char *)"USER") == NULL) {
436 name = xstrcpy((char *)"/root"); 436 name = xstrcpy((char *)"/root");
461 srv_send((char *)"440 No such file"); 461 srv_send((char *)"440 No such file");
462 } 462 }
463 463
464 free(name); 464 free(name);
465 name = NULL; 465 name = NULL;
466 return 1; 466 return 0;
467 } 467 }
468 468
469 if (strcmp(opt, (char *)"LOG") == 0) { 469 if (strcmp(opt, (char *)"LOG") == 0) {
470 if (getenv((char *)"USER") == NULL) { 470 if (getenv((char *)"USER") == NULL) {
471 name = xstrcpy((char *)"/root"); 471 name = xstrcpy((char *)"/root");
576 srv_send((char *)"440 No such file"); 576 srv_send((char *)"440 No such file");
577 } 577 }
578 578
579 free(name); 579 free(name);
580 name = NULL; 580 name = NULL;
581 return 1;
582 } 581 }
583 582
584 return 0; 583 return 0;
585 } 584 }
586 585
646 opt = strtok(buf, " \0"); 645 opt = strtok(buf, " \0");
647 opt = strtok(NULL, " \0"); 646 opt = strtok(NULL, " \0");
648 647
649 if (opt == NULL) { 648 if (opt == NULL) {
650 srv_send((char *)"501 Subcommand missing"); 649 srv_send((char *)"501 Subcommand missing");
651 return 1; 650 return 0;
652 } 651 }
653 param = strtok(NULL, "\0"); 652 param = strtok(NULL, "\0");
654 653
655 if (strcmp(opt, (char *)"HELP") == 0) { 654 if (strcmp(opt, (char *)"HELP") == 0) {
656 srv_send((char *)"100 Help text follows:"); 655 srv_send((char *)"100 Help text follows:");
669 for (device = Config.devices; device; device = device->next) { 668 for (device = Config.devices; device; device = device->next) {
670 srv_send((char *)"%s,%s,%d,%d,%s,%s,%d", device->uuid, device->address, device->subdevice, 669 srv_send((char *)"%s,%s,%d,%d,%s,%s,%d", device->uuid, device->address, device->subdevice,
671 device->inuse, device->comment, DEVDIR[device->direction], device->value + device->offset); 670 device->inuse, device->comment, DEVDIR[device->direction], device->value + device->offset);
672 } 671 }
673 srv_send((char *)"."); 672 srv_send((char *)".");
674 return 1; 673 return 0;
675 } 674 }
676 675
677 if (param == NULL) { 676 if (param == NULL) {
678 srv_send((char *)"502 Parameter missing"); 677 srv_send((char *)"502 Parameter missing");
679 return 1; 678 return 1;
719 #ifdef HAVE_WIRINGPI_H 718 #ifdef HAVE_WIRINGPI_H
720 piUnlock(LOCK_DEVICES); 719 piUnlock(LOCK_DEVICES);
721 #endif 720 #endif
722 syslog(LOG_NOTICE, "Device %s added", device->uuid); 721 syslog(LOG_NOTICE, "Device %s added", device->uuid);
723 srv_send((char *)"211 Device %s added", device->uuid); 722 srv_send((char *)"211 Device %s added", device->uuid);
724 return 0; 723 return 1;
725 724
726 } else { 725 } else {
727 srv_send((char *)"503 Parameter error"); 726 srv_send((char *)"503 Parameter error");
728 return 1; 727 return 0;
729 } 728 }
730 } 729 }
731 730
732 if (strcmp(opt, (char *)"DEL") == 0) { 731 if (strcmp(opt, (char *)"DEL") == 0) {
733 732
739 piUnlock(LOCK_DEVICES); 738 piUnlock(LOCK_DEVICES);
740 #endif 739 #endif
741 if (rc) { 740 if (rc) {
742 syslog(LOG_NOTICE, "Device %s deleted", param); 741 syslog(LOG_NOTICE, "Device %s deleted", param);
743 srv_send((char *)"211 Device %s deleted", param); 742 srv_send((char *)"211 Device %s deleted", param);
744 return 0; 743 return 1;
745 } else { 744 } else {
746 srv_send((char *)"440 No such device"); 745 srv_send((char *)"440 No such device");
747 return 1; 746 return 0;
748 } 747 }
749 } 748 }
750 749
751 if (strcmp(opt, (char *)"GET") == 0) { 750 if (strcmp(opt, (char *)"GET") == 0) {
752 for (device = Config.devices; device; device = device->next) { 751 for (device = Config.devices; device; device = device->next) {
771 srv_send((char *)"DESCRIPTION,%s", device->description); 770 srv_send((char *)"DESCRIPTION,%s", device->description);
772 srv_send((char *)"INUSE,%d", device->inuse); 771 srv_send((char *)"INUSE,%d", device->inuse);
773 srv_send((char *)"COMMENT,%s", device->comment); 772 srv_send((char *)"COMMENT,%s", device->comment);
774 srv_send((char *)"TIMESTAMP,%d", my_timestamp); 773 srv_send((char *)"TIMESTAMP,%d", my_timestamp);
775 srv_send((char *)"."); 774 srv_send((char *)".");
776 return 1; 775 return 0;
777 } 776 }
778 } 777 }
779 srv_send((char *)"440 No such device"); 778 srv_send((char *)"440 No such device");
780 return 1; 779 return 0;
781 } 780 }
782 781
783 if (strcmp(opt, (char *)"PUT") == 0) { 782 if (strcmp(opt, (char *)"PUT") == 0) {
784 for (device = Config.devices; device; device = device->next) { 783 for (device = Config.devices; device; device = device->next) {
785 if (strcmp(device->uuid, param) == 0) { 784 if (strcmp(device->uuid, param) == 0) {
786 while (1) { 785 while (1) {
787 rlen = srv_recv(ibuf); 786 rlen = srv_recv(ibuf);
788 if (rlen == -1) { 787 if (rlen == -1) {
789 return 1; 788 return 0;
790 } 789 }
791 if (strlen(ibuf)) { 790 if (strlen(ibuf)) {
792 if (strcmp(ibuf, (char *)".") == 0) { 791 if (strcmp(ibuf, (char *)".") == 0) {
793 srv_send((char *)"219 Accepted Device record"); 792 srv_send((char *)"219 Accepted Device record");
794 return 0; 793 return 1;
795 } 794 }
796 kwd = strtok(ibuf, ",\0"); 795 kwd = strtok(ibuf, ",\0");
797 val = strtok(NULL, "\0"); 796 val = strtok(NULL, "\0");
798 if (kwd && val) { 797 if (kwd && val) {
799 if (strcmp(kwd, (char *)"TYPE") == 0) { 798 if (strcmp(kwd, (char *)"TYPE") == 0) {
943 } 942 }
944 } 943 }
945 } 944 }
946 } 945 }
947 srv_send((char *)"440 No such device"); 946 srv_send((char *)"440 No such device");
948 return 1; 947 return 0;
949 } 948 }
950 949
951 srv_send((char *)"504 Subcommand error"); 950 srv_send((char *)"504 Subcommand error");
952 return 1; 951 return 0;
953 } 952 }
954 953
955 954
956 955
957 /* 956 /*
966 opt = strtok(buf, " \0"); 965 opt = strtok(buf, " \0");
967 opt = strtok(NULL, "\0"); 966 opt = strtok(NULL, "\0");
968 967
969 if (opt == NULL) { 968 if (opt == NULL) {
970 srv_send((char *)"501 Subcommand missing"); 969 srv_send((char *)"501 Subcommand missing");
971 return 1; 970 return 0;
972 } 971 }
973 972
974 if (strcmp(opt, (char *)"HELP") == 0) { 973 if (strcmp(opt, (char *)"HELP") == 0) {
975 srv_send((char *)"100 Help text follows:"); 974 srv_send((char *)"100 Help text follows:");
976 srv_send((char *)"Recognized commands:"); 975 srv_send((char *)"Recognized commands:");
995 #ifdef HAVE_WIRINGPI_H 994 #ifdef HAVE_WIRINGPI_H
996 srv_send((char *)"LCD_COLS,%d", Config.lcd_cols); 995 srv_send((char *)"LCD_COLS,%d", Config.lcd_cols);
997 srv_send((char *)"LCD_ROWS,%d", Config.lcd_rows); 996 srv_send((char *)"LCD_ROWS,%d", Config.lcd_rows);
998 #endif 997 #endif
999 srv_send((char *)"."); 998 srv_send((char *)".");
1000 return 1; 999 return 0;
1001 } 1000 }
1002 1001
1003 if (strcmp(opt, (char *)"PUT") == 0) { 1002 if (strcmp(opt, (char *)"PUT") == 0) {
1004 while (1) { 1003 while (1) {
1005 rlen = srv_recv(ibuf); 1004 rlen = srv_recv(ibuf);
1006 if (rlen == -1) { 1005 if (rlen == -1) {
1007 return 1; 1006 return 0;
1008 } 1007 }
1009 if (strlen(ibuf)) { 1008 if (strlen(ibuf)) {
1010 if (strcmp(ibuf, (char *)".") == 0) { 1009 if (strcmp(ibuf, (char *)".") == 0) {
1011 srv_send((char *)"219 Accepted Global record"); 1010 srv_send((char *)"219 Accepted Global record");
1012 return 0; 1011 return 1;
1013 } 1012 }
1014 kwd = strtok(ibuf, ",\0"); 1013 kwd = strtok(ibuf, ",\0");
1015 val = strtok(NULL, "\0"); 1014 val = strtok(NULL, "\0");
1016 if (kwd) { 1015 if (kwd) {
1017 if (strcmp(kwd, (char *)"NAME") == 0) { 1016 if (strcmp(kwd, (char *)"NAME") == 0) {
1084 } 1083 }
1085 } 1084 }
1086 } 1085 }
1087 1086
1088 srv_send((char *)"504 Subcommand error"); 1087 srv_send((char *)"504 Subcommand error");
1089 return 1; 1088 return 0;
1090 } 1089 }
1091 1090
1092 1091
1093 1092
1094 /* 1093 /*
1115 srv_send((char *)"212 Fermenter list follows:"); 1114 srv_send((char *)"212 Fermenter list follows:");
1116 for (unit = Config.units; unit; unit = unit->next) { 1115 for (unit = Config.units; unit; unit = unit->next) {
1117 srv_send((char *)"%s,%s,%s", unit->uuid, unit->name, UNITMODE[unit->mode]); 1116 srv_send((char *)"%s,%s,%s", unit->uuid, unit->name, UNITMODE[unit->mode]);
1118 } 1117 }
1119 srv_send((char *)"."); 1118 srv_send((char *)".");
1120 return 1; 1119 return 0;
1121 1120
1122 } else if (strcmp(opt, (char *)"HELP") == 0) { 1121 } else if (strcmp(opt, (char *)"HELP") == 0) {
1123 srv_send((char *)"100 Help text follows:"); 1122 srv_send((char *)"100 Help text follows:");
1124 srv_send((char *)"Recognized commands:"); 1123 srv_send((char *)"Recognized commands:");
1125 srv_send((char *)"LIST List available units"); 1124 srv_send((char *)"LIST List available units");
1130 } else if (strcmp(opt, (char *)"LOG") == 0) { 1129 } else if (strcmp(opt, (char *)"LOG") == 0) {
1131 1130
1132 param = strtok(NULL, "\0"); 1131 param = strtok(NULL, "\0");
1133 if (param == NULL) { 1132 if (param == NULL) {
1134 srv_send((char *)"502 Parameter missing"); 1133 srv_send((char *)"502 Parameter missing");
1135 return 1; 1134 return 0;
1136 } 1135 }
1137 1136
1138 q[0] = q[1] = q[2] = q[3] = q[4] = 'a'; 1137 q[0] = q[1] = q[2] = q[3] = q[4] = 'a';
1139 for (unit = Config.units; unit; unit = unit->next) { 1138 for (unit = Config.units; unit; unit = unit->next) {
1140 if (strcmp(param, unit->uuid) == 0) 1139 if (strcmp(param, unit->uuid) == 0)
1232 } 1231 }
1233 } 1232 }
1234 free(filename); 1233 free(filename);
1235 filename = NULL; 1234 filename = NULL;
1236 srv_send((char *)"."); 1235 srv_send((char *)".");
1237 return 1; 1236 return 0;
1238 } 1237 }
1239 1238
1240 srv_send((char *)"504 Subcommand error"); 1239 srv_send((char *)"504 Subcommand error");
1241 return 1; 1240 return 0;
1242 } 1241 }
1243 1242
1244 1243
1245 1244
1246 /* 1245 /*
1265 opt = strtok(buf, " \0"); 1264 opt = strtok(buf, " \0");
1266 opt = strtok(NULL, " \0"); 1265 opt = strtok(NULL, " \0");
1267 1266
1268 if (opt == NULL) { 1267 if (opt == NULL) {
1269 srv_send((char *)"501 Subcommand missing"); 1268 srv_send((char *)"501 Subcommand missing");
1270 return 1; 1269 return 0;
1271 } 1270 }
1272 1271
1273 if (strcmp(opt, (char *)"HELP") == 0) { 1272 if (strcmp(opt, (char *)"HELP") == 0) {
1274 srv_send((char *)"100 Help text follows:"); 1273 srv_send((char *)"100 Help text follows:");
1275 srv_send((char *)"Recognized commands:"); 1274 srv_send((char *)"Recognized commands:");
1295 for (step = profile->steps; step; step = step->next) 1294 for (step = profile->steps; step; step = step->next)
1296 j++; 1295 j++;
1297 srv_send((char *)"%s,%s,%d,%d", profile->uuid, profile->name, j, profile->busy); 1296 srv_send((char *)"%s,%s,%d,%d", profile->uuid, profile->name, j, profile->busy);
1298 } 1297 }
1299 srv_send((char *)"."); 1298 srv_send((char *)".");
1300 return 1; 1299 return 0;
1301 } 1300 }
1302 1301
1303 param = strtok(NULL, "\0"); 1302 param = strtok(NULL, "\0");
1304 if (param == NULL) { 1303 if (param == NULL) {
1305 srv_send((char *)"502 Parameter missing"); 1304 srv_send((char *)"502 Parameter missing");
1306 return 1; 1305 return 0;
1307 } 1306 }
1308 1307
1309 if (strcmp(opt, (char *)"ADD") == 0) { 1308 if (strcmp(opt, (char *)"ADD") == 0) {
1310 profile = (profiles_list *)malloc(sizeof(profiles_list)); 1309 profile = (profiles_list *)malloc(sizeof(profiles_list));
1311 profile->next = NULL; 1310 profile->next = NULL;
1328 } 1327 }
1329 } 1328 }
1330 1329
1331 syslog(LOG_NOTICE, "Profile %s added", profile->uuid); 1330 syslog(LOG_NOTICE, "Profile %s added", profile->uuid);
1332 srv_send((char *)"211 Profile %s added", profile->uuid); 1331 srv_send((char *)"211 Profile %s added", profile->uuid);
1333 return 0; 1332 return 1;
1334 1333
1335 1334
1336 } else if (strcmp(opt, (char *)"DEL") == 0) { 1335 } else if (strcmp(opt, (char *)"DEL") == 0) {
1337 if (delete_Profile(param)) { 1336 if (delete_Profile(param)) {
1338 syslog(LOG_NOTICE, "Profile %s deleted", param); 1337 syslog(LOG_NOTICE, "Profile %s deleted", param);
1339 srv_send((char *)"211 Profile %s deleted", param); 1338 srv_send((char *)"211 Profile %s deleted", param);
1340 return 0; 1339 return 1;
1341 } else { 1340 } else {
1342 srv_send((char *)"440 No such profile"); 1341 srv_send((char *)"440 No such profile");
1343 return 1; 1342 return 0;
1344 } 1343 }
1345 1344
1346 } else if (strcmp(opt, (char *)"GET") == 0) { 1345 } else if (strcmp(opt, (char *)"GET") == 0) {
1347 for (profile = Config.profiles; profile; profile = profile->next) { 1346 for (profile = Config.profiles; profile; profile = profile->next) {
1348 if (strcmp(profile->uuid, param) == 0) { 1347 if (strcmp(profile->uuid, param) == 0) {
1349 srv_send((char *)"213 Profile record follows:"); 1348 srv_send((char *)"213 Profile record follows:");
1350 srv_send((char *)"UUID,%s", profile->uuid); 1349 srv_send((char *)"UUID,%s", profile->uuid);
1351 srv_send((char *)"NAME,%s", profile->name); 1350 srv_send((char *)"NAME,%s", profile->name);
1352 srv_send((char *)"INITTEMP,%.1f", profile->inittemp); 1351 srv_send((char *)"INITTEMP,%.1f", profile->inittemp);
1353 srv_send((char *)"."); 1352 srv_send((char *)".");
1354 return 1; 1353 return 0;
1355 } 1354 }
1356 } 1355 }
1357 srv_send((char *)"440 No such profile"); 1356 srv_send((char *)"440 No such profile");
1358 return 1; 1357 return 0;
1359 1358
1360 } else if (strcmp(opt, (char *)"PUT") == 0) { 1359 } else if (strcmp(opt, (char *)"PUT") == 0) {
1361 for (profile = Config.profiles; profile; profile = profile->next) { 1360 for (profile = Config.profiles; profile; profile = profile->next) {
1362 if (strcmp(profile->uuid, param) == 0) { 1361 if (strcmp(profile->uuid, param) == 0) {
1363 while (1) { 1362 while (1) {
1364 rlen = srv_recv(ibuf); 1363 rlen = srv_recv(ibuf);
1365 if (rlen == -1) { 1364 if (rlen == -1) {
1366 return 1; 1365 return 0;
1367 } 1366 }
1368 if (strlen(ibuf)) { 1367 if (strlen(ibuf)) {
1369 if (strcmp(ibuf, (char *)".") == 0) { 1368 if (strcmp(ibuf, (char *)".") == 0) {
1370 srv_send((char *)"219 Accepted Profile record"); 1369 srv_send((char *)"219 Accepted Profile record");
1371 return 0; 1370 return 1;
1372 } 1371 }
1373 kwd = strtok(ibuf, ",\0"); 1372 kwd = strtok(ibuf, ",\0");
1374 val = strtok(NULL, "\0"); 1373 val = strtok(NULL, "\0");
1375 if (kwd && val) { 1374 if (kwd && val) {
1376 if (strcmp(kwd, (char *)"NAME") == 0) { 1375 if (strcmp(kwd, (char *)"NAME") == 0) {
1391 } 1390 }
1392 } 1391 }
1393 } 1392 }
1394 } 1393 }
1395 srv_send((char *)"440 No such profile"); 1394 srv_send((char *)"440 No such profile");
1396 return 1; 1395 return 0;
1397 1396
1398 } else if (strcmp(opt, (char *)"GETS") == 0) { 1397 } else if (strcmp(opt, (char *)"GETS") == 0) {
1399 1398
1400 for (profile = Config.profiles; profile; profile = profile->next) { 1399 for (profile = Config.profiles; profile; profile = profile->next) {
1401 if (strcmp(profile->uuid, param) == 0) { 1400 if (strcmp(profile->uuid, param) == 0) {
1402 srv_send((char *)"215 Profile steps follow:"); 1401 srv_send((char *)"215 Profile steps follow:");
1403 for (step = profile->steps; step; step = step->next) { 1402 for (step = profile->steps; step; step = step->next) {
1404 srv_send((char *)"%d,%d,%.1f", step->steptime, step->resttime, step->target); 1403 srv_send((char *)"%d,%d,%.1f", step->steptime, step->resttime, step->target);
1405 } 1404 }
1406 srv_send((char *)"."); 1405 srv_send((char *)".");
1407 return 1; 1406 return 0;
1408 } 1407 }
1409 } 1408 }
1410 1409
1411 srv_send((char *)"440 No such profile"); 1410 srv_send((char *)"440 No such profile");
1412 return 1; 1411 return 0;
1413 1412
1414 } else if (strcmp(opt, (char *)"PUTS") == 0) { 1413 } else if (strcmp(opt, (char *)"PUTS") == 0) {
1415 1414
1416 for (profile = Config.profiles; profile; profile = profile->next) { 1415 for (profile = Config.profiles; profile; profile = profile->next) {
1417 if (strcmp(profile->uuid, param) == 0) { 1416 if (strcmp(profile->uuid, param) == 0) {
1427 1426
1428 j = 0; 1427 j = 0;
1429 while (1) { 1428 while (1) {
1430 rlen = srv_recv(ibuf); 1429 rlen = srv_recv(ibuf);
1431 if (rlen == -1) { 1430 if (rlen == -1) {
1432 return 1; 1431 return 0;
1433 } else { 1432 } else {
1434 if (strlen(ibuf)) { 1433 if (strlen(ibuf)) {
1435 if (strcmp(ibuf, (char *)".") == 0) { 1434 if (strcmp(ibuf, (char *)".") == 0) {
1436 1435
1437 srv_send((char *)"219 Accepted Profile steps"); 1436 srv_send((char *)"219 Accepted Profile steps");
1438 return 0; 1437 return 1;
1439 } 1438 }
1440 sstep = strtok(ibuf, ",\0"); 1439 sstep = strtok(ibuf, ",\0");
1441 rest = strtok(NULL, ",\0"); 1440 rest = strtok(NULL, ",\0");
1442 targ = strtok(NULL, "\0"); 1441 targ = strtok(NULL, "\0");
1443 1442
1471 } 1470 }
1472 } 1471 }
1473 } 1472 }
1474 1473
1475 srv_send((char *)"440 No such profile"); 1474 srv_send((char *)"440 No such profile");
1476 return 1; 1475 return 0;
1477 } 1476 }
1478 1477
1479 srv_send((char *)"504 Subcommand error"); 1478 srv_send((char *)"504 Subcommand error");
1480 return 1; 1479 return 0;
1481 } 1480 }
1482 1481
1483 1482
1484 1483
1485 #ifdef USE_SIMULATOR 1484 #ifdef USE_SIMULATOR
1536 opt = strtok(buf, " \0"); 1535 opt = strtok(buf, " \0");
1537 opt = strtok(NULL, " \0"); 1536 opt = strtok(NULL, " \0");
1538 1537
1539 if (opt == NULL) { 1538 if (opt == NULL) {
1540 srv_send((char *)"501 Subcommand missing"); 1539 srv_send((char *)"501 Subcommand missing");
1541 return 1; 1540 return 0;
1542 } 1541 }
1543 param = strtok(NULL, "\0"); 1542 param = strtok(NULL, "\0");
1544 1543
1545 if (strcmp(opt, (char *)"HELP") == 0) { 1544 if (strcmp(opt, (char *)"HELP") == 0) {
1546 srv_send((char *)"100 Help text follows:"); 1545 srv_send((char *)"100 Help text follows:");
1558 srv_send((char *)"212 Simulators list follows:"); 1557 srv_send((char *)"212 Simulators list follows:");
1559 for (simulator = Config.simulators; simulator; simulator = simulator->next) { 1558 for (simulator = Config.simulators; simulator; simulator = simulator->next) {
1560 srv_send((char *)"%s,%s", simulator->uuid, simulator->name); 1559 srv_send((char *)"%s,%s", simulator->uuid, simulator->name);
1561 } 1560 }
1562 srv_send((char *)"."); 1561 srv_send((char *)".");
1563 return 1; 1562 return 0;
1564 } 1563 }
1565 1564
1566 if (param == NULL) { 1565 if (param == NULL) {
1567 srv_send((char *)"502 Parameter missing"); 1566 srv_send((char *)"502 Parameter missing");
1568 return 1; 1567 return 0;
1569 } 1568 }
1570 1569
1571 if (strcmp(opt, (char *)"ADD") == 0) { 1570 if (strcmp(opt, (char *)"ADD") == 0) {
1572 1571
1573 /* 1572 /*
1574 * For now, only one simulator is allowed. 1573 * For now, only one simulator is allowed.
1575 */ 1574 */
1576 if (Config.simulators) { 1575 if (Config.simulators) {
1577 srv_send((char *)"441 Maximum simulators reached"); 1576 srv_send((char *)"441 Maximum simulators reached");
1578 return 1; 1577 return 0;
1579 } 1578 }
1580 1579
1581 simulator = (simulator_list *)malloc(sizeof(simulator_list)); 1580 simulator = (simulator_list *)malloc(sizeof(simulator_list));
1582 simulator->next = NULL; 1581 simulator->next = NULL;
1583 simulator->version = 1; 1582 simulator->version = 1;
1610 } 1609 }
1611 } 1610 }
1612 1611
1613 syslog(LOG_NOTICE, "Simulator %s added", simulator->uuid); 1612 syslog(LOG_NOTICE, "Simulator %s added", simulator->uuid);
1614 srv_send((char *)"211 Simulator %s added", simulator->uuid); 1613 srv_send((char *)"211 Simulator %s added", simulator->uuid);
1615 return 0; 1614 return 1;
1616 } 1615 }
1617 1616
1618 if (strcmp(opt, (char *)"DEL") == 0) { 1617 if (strcmp(opt, (char *)"DEL") == 0) {
1619 rc = delete_Simulator(param); 1618 rc = delete_Simulator(param);
1620 if (rc) { 1619 if (rc) {
1621 syslog(LOG_NOTICE, "Simulator %s deleted", param); 1620 syslog(LOG_NOTICE, "Simulator %s deleted", param);
1622 srv_send((char *)"211 Simulator %s deleted", param); 1621 srv_send((char *)"211 Simulator %s deleted", param);
1623 return 0; 1622 return 1;
1624 } else { 1623 } else {
1625 srv_send((char *)"440 No such simulator"); 1624 srv_send((char *)"440 No such simulator");
1626 return 1; 1625 return 0;
1627 } 1626 }
1628 } 1627 }
1629 1628
1630 if (strcmp(opt, (char *)"GET") == 0) { 1629 if (strcmp(opt, (char *)"GET") == 0) {
1631 for (simulator = Config.simulators; simulator; simulator = simulator->next) { 1630 for (simulator = Config.simulators; simulator; simulator = simulator->next) {
1645 srv_send((char *)"HEATER_SIZE,%.3f", simulator->heater_size); 1644 srv_send((char *)"HEATER_SIZE,%.3f", simulator->heater_size);
1646 srv_send((char *)"HEATER_STATE,%d", simulator->heater_state); 1645 srv_send((char *)"HEATER_STATE,%d", simulator->heater_state);
1647 srv_send((char *)"COOLER_STATE,%d", simulator->cooler_state); 1646 srv_send((char *)"COOLER_STATE,%d", simulator->cooler_state);
1648 srv_send((char *)"FRIGO_ISOLATION,%.3f", simulator->frigo_isolation); 1647 srv_send((char *)"FRIGO_ISOLATION,%.3f", simulator->frigo_isolation);
1649 srv_send((char *)"."); 1648 srv_send((char *)".");
1650 return 1; 1649 return 0;
1651 } 1650 }
1652 } 1651 }
1653 srv_send((char *)"440 No such simulator"); 1652 srv_send((char *)"440 No such simulator");
1654 return 1; 1653 return 0;
1655 } 1654 }
1656 1655
1657 if (strcmp(opt, (char *)"PUT") == 0) { 1656 if (strcmp(opt, (char *)"PUT") == 0) {
1658 for (simulator = Config.simulators; simulator; simulator = simulator->next) { 1657 for (simulator = Config.simulators; simulator; simulator = simulator->next) {
1659 if (strcmp(simulator->uuid, param) == 0) { 1658 if (strcmp(simulator->uuid, param) == 0) {
1660 while (1) { 1659 while (1) {
1661 rlen = srv_recv(ibuf); 1660 rlen = srv_recv(ibuf);
1662 if (rlen == -1) { 1661 if (rlen == -1) {
1663 return 1; 1662 return 0;
1664 } 1663 }
1665 if (strlen(ibuf)) { 1664 if (strlen(ibuf)) {
1666 if (strcmp(ibuf, (char *)".") == 0) { 1665 if (strcmp(ibuf, (char *)".") == 0) {
1667 srv_send((char *)"219 Accepted Simulator record"); 1666 srv_send((char *)"219 Accepted Simulator record");
1668 return 0; 1667 return 1;
1669 } 1668 }
1670 kwd = strtok(ibuf, ",\0"); 1669 kwd = strtok(ibuf, ",\0");
1671 val = strtok(NULL, "\0"); 1670 val = strtok(NULL, "\0");
1672 if (kwd && val) { 1671 if (kwd && val) {
1673 1672
1782 } 1781 }
1783 } 1782 }
1784 } 1783 }
1785 } 1784 }
1786 srv_send((char *)"440 No such simulator"); 1785 srv_send((char *)"440 No such simulator");
1787 return 1; 1786 return 0;
1788 } 1787 }
1789 1788
1790 srv_send((char *)"504 Subcommand error"); 1789 srv_send((char *)"504 Subcommand error");
1791 return 1; 1790 return 0;
1792 } 1791 }
1793 #endif 1792 #endif
1794 1793
1795 1794
1796 1795
1913 opt = strtok(buf, " \0"); 1912 opt = strtok(buf, " \0");
1914 opt = strtok(NULL, " \0"); 1913 opt = strtok(NULL, " \0");
1915 1914
1916 if (opt == NULL) { 1915 if (opt == NULL) {
1917 srv_send((char *)"501 Subcommand missing"); 1916 srv_send((char *)"501 Subcommand missing");
1918 return 1; 1917 return 0;
1919 } 1918 }
1920 param = strtok(NULL, "\0"); 1919 param = strtok(NULL, "\0");
1921 1920
1922 if (strcmp(opt, (char *)"HELP") == 0) { 1921 if (strcmp(opt, (char *)"HELP") == 0) {
1923 srv_send((char *)"100 Help text follows:"); 1922 srv_send((char *)"100 Help text follows:");
1935 srv_send((char *)"212 Fermenter list follows:"); 1934 srv_send((char *)"212 Fermenter list follows:");
1936 for (unit = Config.units; unit; unit = unit->next) { 1935 for (unit = Config.units; unit; unit = unit->next) {
1937 srv_send((char *)"%s,%s,%s", unit->uuid, unit->name, UNITMODE[unit->mode]); 1936 srv_send((char *)"%s,%s,%s", unit->uuid, unit->name, UNITMODE[unit->mode]);
1938 } 1937 }
1939 srv_send((char *)"."); 1938 srv_send((char *)".");
1940 return 1; 1939 return 0;
1941 } 1940 }
1942 1941
1943 if (param == NULL) { 1942 if (param == NULL) {
1944 srv_send((char *)"502 Parameter missing"); 1943 srv_send((char *)"502 Parameter missing");
1945 return 1; 1944 return 0;
1946 } 1945 }
1947 1946
1948 if (strcmp(opt, (char *)"ADD") == 0) { 1947 if (strcmp(opt, (char *)"ADD") == 0) {
1949 unit = (units_list *)malloc(sizeof(units_list)); 1948 unit = (units_list *)malloc(sizeof(units_list));
1950 unit->next = NULL; 1949 unit->next = NULL;
2000 #endif 1999 #endif
2001 run_pause = FALSE; 2000 run_pause = FALSE;
2002 2001
2003 syslog(LOG_NOTICE, "Unit %s added", unit->uuid); 2002 syslog(LOG_NOTICE, "Unit %s added", unit->uuid);
2004 srv_send((char *)"211 Unit %s added", unit->uuid); 2003 srv_send((char *)"211 Unit %s added", unit->uuid);
2005 return 0; 2004 return 1;
2006 } 2005 }
2007 2006
2008 if (strcmp(opt, (char *)"DEL") == 0) { 2007 if (strcmp(opt, (char *)"DEL") == 0) {
2009 /* 2008 /*
2010 * Block main process. 2009 * Block main process.
2023 run_pause = FALSE; 2022 run_pause = FALSE;
2024 2023
2025 if (rc) { 2024 if (rc) {
2026 syslog(LOG_NOTICE, "Unit %s deleted", param); 2025 syslog(LOG_NOTICE, "Unit %s deleted", param);
2027 srv_send((char *)"211 Unit %s deleted", param); 2026 srv_send((char *)"211 Unit %s deleted", param);
2028 return 0; 2027 return 1;
2029 } else { 2028 } else {
2030 srv_send((char *)"440 No such unit"); 2029 srv_send((char *)"440 No such unit");
2031 return 1; 2030 return 0;
2032 } 2031 }
2033 } 2032 }
2034 2033
2035 if (strcmp(opt, (char *)"GET") == 0) { 2034 if (strcmp(opt, (char *)"GET") == 0) {
2036 for (unit = Config.units; unit; unit = unit->next) { 2035 for (unit = Config.units; unit; unit = unit->next) {
2094 srv_send((char *)"PROF_PEAK_REL,%.3f", unit->prof_peak_rel); 2093 srv_send((char *)"PROF_PEAK_REL,%.3f", unit->prof_peak_rel);
2095 srv_send((char *)"PROF_PRIMARY_DONE,%d", (int)unit->prof_primary_done); 2094 srv_send((char *)"PROF_PRIMARY_DONE,%d", (int)unit->prof_primary_done);
2096 srv_send((char *)"TEMP_SET_MIN,%.1f", unit->temp_set_min); 2095 srv_send((char *)"TEMP_SET_MIN,%.1f", unit->temp_set_min);
2097 srv_send((char *)"TEMP_SET_MAX,%.1f", unit->temp_set_max); 2096 srv_send((char *)"TEMP_SET_MAX,%.1f", unit->temp_set_max);
2098 srv_send((char *)"."); 2097 srv_send((char *)".");
2099 return 1; 2098 return 0;
2100 } 2099 }
2101 } 2100 }
2102 srv_send((char *)"440 No such unit"); 2101 srv_send((char *)"440 No such unit");
2103 return 1; 2102 return 0;
2104 } 2103 }
2105 2104
2106 if (strcmp(opt, (char *)"PUT") == 0) { 2105 if (strcmp(opt, (char *)"PUT") == 0) {
2107 /* 2106 /*
2108 * Block main process 2107 * Block main process
2118 if (strcmp(unit->uuid, param) == 0) { 2117 if (strcmp(unit->uuid, param) == 0) {
2119 while (1) { 2118 while (1) {
2120 rlen = srv_recv(ibuf); 2119 rlen = srv_recv(ibuf);
2121 if (rlen == -1) { 2120 if (rlen == -1) {
2122 run_pause = FALSE; 2121 run_pause = FALSE;
2123 return 1; 2122 return 0;
2124 } 2123 }
2125 if (strlen(ibuf)) { 2124 if (strlen(ibuf)) {
2126 if (strcmp(ibuf, (char *)".") == 0) { 2125 if (strcmp(ibuf, (char *)".") == 0) {
2127 srv_send((char *)"219 Accepted Unit record"); 2126 srv_send((char *)"219 Accepted Unit record");
2128 run_pause = FALSE; 2127 run_pause = FALSE;
2129 return 0; 2128 return 1;
2130 } 2129 }
2131 kwd = strtok(ibuf, ",\0"); 2130 kwd = strtok(ibuf, ",\0");
2132 val = strtok(NULL, "\0"); 2131 val = strtok(NULL, "\0");
2133 if (kwd) { 2132 if (kwd) {
2134 /* 2133 /*
2507 } 2506 }
2508 } 2507 }
2509 } 2508 }
2510 srv_send((char *)"440 No such unit"); 2509 srv_send((char *)"440 No such unit");
2511 run_pause = FALSE; 2510 run_pause = FALSE;
2512 return 1; 2511 return 0;
2513 } 2512 }
2514 2513
2515 srv_send((char *)"504 Subcommand error"); 2514 srv_send((char *)"504 Subcommand error");
2516 return 1; 2515 return 0;
2517 } 2516 }
2518 2517
2519 2518
2520 2519
2521 void cmd_server(void) 2520 void cmd_server(void)
2529 /* 2528 /*
2530 * Process commands from the client 2529 * Process commands from the client
2531 */ 2530 */
2532 if (strncmp(buf, "ARCHIVE", 7) == 0) { 2531 if (strncmp(buf, "ARCHIVE", 7) == 0) {
2533 cmd_archive(buf); 2532 cmd_archive(buf);
2533
2534 } else if (strncmp(buf, "DEVICE", 6) == 0) { 2534 } else if (strncmp(buf, "DEVICE", 6) == 0) {
2535 if (cmd_device(buf) == 0) 2535 if (cmd_device(buf))
2536 wrconfig(); 2536 wrconfig();
2537
2537 } else if (strncmp(buf, "GLOBAL", 6) == 0) { 2538 } else if (strncmp(buf, "GLOBAL", 6) == 0) {
2538 if (cmd_global(buf) == 0) 2539 if (cmd_global(buf))
2539 wrconfig(); 2540 wrconfig();
2541
2540 } else if (strncmp(buf, "HELP", 4) == 0) { 2542 } else if (strncmp(buf, "HELP", 4) == 0) {
2541 srv_send((char *)"100 Help text follows"); 2543 srv_send((char *)"100 Help text follows");
2542 srv_send((char *)"Recognized commands:"); 2544 srv_send((char *)"Recognized commands:");
2543 srv_send((char *)""); 2545 srv_send((char *)"");
2544 // 12345678901234567890123456789012345678901234567890123456789012345678901234567890 2546 // 12345678901234567890123456789012345678901234567890123456789012345678901234567890
2558 srv_send((char *)"SIMULATOR HELP Simulator help screen"); 2560 srv_send((char *)"SIMULATOR HELP Simulator help screen");
2559 #endif 2561 #endif
2560 srv_send((char *)"UNIT <CMD> [parameters] Unit commands"); 2562 srv_send((char *)"UNIT <CMD> [parameters] Unit commands");
2561 srv_send((char *)"UNIT HELP Unit help screen"); 2563 srv_send((char *)"UNIT HELP Unit help screen");
2562 srv_send((char *)"."); 2564 srv_send((char *)".");
2565
2563 } else if (strncmp(buf, "LIST", 4) == 0) { 2566 } else if (strncmp(buf, "LIST", 4) == 0) {
2564 cmd_list(buf); 2567 cmd_list(buf);
2568
2565 } else if (strncmp(buf, "PING", 4) == 0) { 2569 } else if (strncmp(buf, "PING", 4) == 0) {
2566 srv_send((char *)"101 PONG"); 2570 srv_send((char *)"101 PONG");
2571
2567 } else if (strncmp(buf, "PROFILE", 7) == 0) { 2572 } else if (strncmp(buf, "PROFILE", 7) == 0) {
2568 if (cmd_profile(buf) == 0) 2573 if (cmd_profile(buf))
2569 wrconfig(); 2574 wrconfig();
2575
2570 #ifdef USE_SIMULATOR 2576 #ifdef USE_SIMULATOR
2571 } else if (strncmp(buf, "SIMULATOR", 9) == 0) { 2577 } else if (strncmp(buf, "SIMULATOR", 9) == 0) {
2572 if (cmd_simulator(buf) == 0) 2578 if (cmd_simulator(buf))
2573 wrconfig(); 2579 wrconfig();
2580
2574 #endif 2581 #endif
2575 } else if (strncmp(buf, "UNIT", 4) == 0) { 2582 } else if (strncmp(buf, "UNIT", 4) == 0) {
2576 if (cmd_unit(buf) == 0) 2583 if (cmd_unit(buf))
2577 wrconfig(); 2584 wrconfig();
2585
2578 } else { 2586 } else {
2579 srv_send((char *)"500 Unknown command"); 2587 srv_send((char *)"500 Unknown command");
2580 } 2588 }
2581 } 2589 }
2582 } 2590 }

mercurial