X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=server%2Ffastcgi.c;h=352efe1bff288ad705e50691a4fdc7de7094d6ee;hb=989a1d2ff5f5afc20f78738f57cc829ae9d11e99;hp=b7a3e6b1409c1022b8bbf05fe84c46152bcd5983;hpb=5d57467589ecefdf5bb5985005705a1c8460c623;p=matches%2FMCTX3420.git diff --git a/server/fastcgi.c b/server/fastcgi.c index b7a3e6b..352efe1 100644 --- a/server/fastcgi.c +++ b/server/fastcgi.c @@ -16,6 +16,7 @@ #include "control.h" #include "options.h" #include "image.h" +#include "pin_test.h" /**The time period (in seconds) before the control key expires */ #define CONTROL_TIMEOUT 180 @@ -227,7 +228,16 @@ bool FCGI_ParseRequest(FCGIContext *context, char *params, FCGIValue values[], s switch(FCGI_TYPE(val->flags)) { case FCGI_BOOL_T: - *((bool*) val->value) = true; + if (!*value) //No value: Default true + *((bool*) val->value) = true; + else { + *((bool*) val->value) = !!(strtol(value, &ptr, 10)); + if (*ptr) { + snprintf(buf, BUFSIZ, "Expected bool for '%s' but got '%s'", key, value); + FCGI_RejectJSON(context, buf); + return false; + } + } break; case FCGI_INT_T: case FCGI_LONG_T: { long parsed = strtol(value, &ptr, 10); @@ -294,6 +304,7 @@ void FCGI_BeginJSON(FCGIContext *context, StatusCodes status_code) FCGI_JSONDouble("start_time", TIMEVAL_TO_DOUBLE(g_options.start_time)); FCGI_JSONDouble("current_time", TIMEVAL_TO_DOUBLE(now)); FCGI_JSONDouble("running_time", TIMEVAL_DIFF(now, g_options.start_time)); + FCGI_JSONPair("control_state", Control_GetModeName()); } /** @@ -446,15 +457,17 @@ void * FCGI_RequestLoop (void *data) { FCGIContext context = {0}; - Log(LOGDEBUG, "First request..."); + Log(LOGDEBUG, "Start loop"); while (FCGI_Accept() >= 0) { - Log(LOGDEBUG, "Got request #%d", context.response_number); + ModuleHandler module_handler = NULL; char module[BUFSIZ], params[BUFSIZ]; //strncpy doesn't zero-truncate properly snprintf(module, BUFSIZ, "%s", getenv("DOCUMENT_URI_LOCAL")); snprintf(params, BUFSIZ, "%s", getenv("QUERY_STRING")); + + Log(LOGDEBUG, "Got request #%d - Module %s, params %s", context.response_number, module, params); //Remove trailing slashes (if present) from module query size_t lastchar = strlen(module) - 1; @@ -478,6 +491,8 @@ void * FCGI_RequestLoop (void *data) module_handler = Actuator_Handler; } else if (!strcmp("image", module)) { module_handler = Image_Handler; + } else if (!strcmp("pin", module)) { + module_handler = Pin_Handler; // *Debug only* pin test module } context.current_module = module; @@ -488,7 +503,7 @@ void * FCGI_RequestLoop (void *data) } context.response_number++; - Log(LOGDEBUG, "Waiting for request #%d", context.response_number); + } Log(LOGDEBUG, "Thread exiting.");