}
/**
- * 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
}
if (FCGI_TYPE(val->flags) == FCGI_INT_T)
- *((int*) val->value) = parsed;
+ *((int*) val->value) = (int) parsed;
else
*((long*) val->value) = parsed;
} break;
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"));
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");
}