X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=server%2Ffastcgi.c;h=6b2957e9f52359399366c8d28fcfeca822db7d3c;hb=9e7cfbbc6137056bba8ed8644fc6ecfe398553fe;hp=b4b35875152a9ae68bca73d3d2cc6453c7cdf857;hpb=711808f7e4376b1a39312a0b1f1aecf069cd10bf;p=matches%2FMCTX3420.git diff --git a/server/fastcgi.c b/server/fastcgi.c index b4b3587..6b2957e 100644 --- a/server/fastcgi.c +++ b/server/fastcgi.c @@ -191,9 +191,9 @@ char *FCGI_KeyPair(char *in, const char **key, const char **value) } /** - * Aids in parsing request parameters. Expected keys along with their type - * and whether or not they're required are provided. This function will then - * parse the parameter string to find these keys. + * Aids in parsing request parameters. + * Input: The expected keys along with their type and whether or not + * they're required. * @param context The context to work in * @param params The parameter string to be parsed * @param values An array of FCGIValue's that specify expected keys @@ -237,7 +237,7 @@ bool FCGI_ParseRequest(FCGIContext *context, char *params, FCGIValue values[], s } if (FCGI_TYPE(val->flags) == FCGI_INT_T) - *((int*) val->value) = parsed; + *((int*) val->value) = (int) parsed; else *((long*) val->value) = parsed; } break; @@ -439,6 +439,7 @@ void * FCGI_RequestLoop (void *data) Log(LOGDEBUG, "Got request #%d", context.response_number); ModuleHandler module_handler = NULL; char module[BUFSIZ], params[BUFSIZ]; + bool lock_required = false; //strncpy doesn't zero-truncate properly snprintf(module, BUFSIZ, "%s", getenv("DOCUMENT_URI_LOCAL")); @@ -462,13 +463,21 @@ void * FCGI_RequestLoop (void *data) module_handler = Control_Handler; } else if (!strcmp("sensors", module)) { module_handler = Sensor_Handler; + lock_required = true; } else if (!strcmp("actuators", module)) { module_handler = Actuator_Handler; + lock_required = true; } context.current_module = module; if (module_handler) { - module_handler(&context, params); + if (lock_required && !Control_Lock()) { + FCGI_RejectJSONEx(&context, STATUS_NOTRUNNING, "Experiment is not running."); + } else { + module_handler(&context, params); + if (lock_required) + Control_Unlock(); + } } else { FCGI_RejectJSON(&context, "Unhandled module"); }