#include "actuator.h"
#include "control.h"
#include "options.h"
+#include "image.h"
/**The time period (in seconds) before the control key expires */
#define CONTROL_TIMEOUT 180
}
/**
- * 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
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);
}
if (FCGI_TYPE(val->flags) == FCGI_INT_T)
- *((int*) val->value) = parsed;
+ *((int*) val->value) = (int) parsed;
else
*((long*) val->value) = parsed;
} break;
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());
}
/**
va_end(list);
}
+
+/**
+ * Write binary data
+ * See fwrite
+ */
+void FCGI_WriteBinary(void * data, size_t size, size_t num_elem)
+{
+ Log(LOGDEBUG,"Writing!");
+ fwrite(data, size, num_elem, stdout);
+}
+
/**
* Escapes a string so it can be used safely.
* Currently escapes to ensure the validity for use as a JSON string
{
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;
module_handler = Sensor_Handler;
} else if (!strcmp("actuators", module)) {
module_handler = Actuator_Handler;
+ } else if (!strcmp("image", module)) {
+ module_handler = Image_Handler;
}
context.current_module = module;
}
context.response_number++;
- Log(LOGDEBUG, "Waiting for request #%d", context.response_number);
+
}
Log(LOGDEBUG, "Thread exiting.");