X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=server%2Ffastcgi.c;h=71f8e5567a5531211a86f18daf2044c4e31d48f5;hb=ba944d765e2c72b3b83225934021b62b16e8037c;hp=8f4ab3244f451e6522c84fffe3f302a2894f1603;hpb=108a72d8b153864beb2079d54f36dfcaaad7aedf;p=matches%2FMCTX3420.git diff --git a/server/fastcgi.c b/server/fastcgi.c index 8f4ab32..71f8e55 100644 --- a/server/fastcgi.c +++ b/server/fastcgi.c @@ -39,24 +39,14 @@ struct FCGIContext { */ static void IdentifyHandler(FCGIContext *context, char *params) { bool ident_sensors = false, ident_actuators = false; - //const char *key, *value; - struct timeval now; + int i; FCGIValue values[2] = {{"sensors", &ident_sensors, FCGI_BOOL_T}, {"actuators", &ident_actuators, FCGI_BOOL_T}}; - if (!FCGI_ParseRequest(context, params, values, 2)) return; - /*while ((params = FCGI_KeyPair(params, &key, &value))) { - if (!strcmp(key, "sensors")) { - ident_sensors = !ident_sensors; - } else if (!strcmp(key, "actuators")) { - ident_actuators = !ident_actuators; - } - }*/ - FCGI_BeginJSON(context, STATUS_OK); FCGI_JSONPair("description", "MCTX3420 Server API (2013)"); FCGI_JSONPair("build_date", __DATE__ " " __TIME__); @@ -237,14 +227,19 @@ bool FCGI_ParseRequest(FCGIContext *context, char *params, FCGIValue values[], s case FCGI_BOOL_T: *((bool*) val->value) = true; break; - case FCGI_LONG_T: - *((long*) val->value) = strtol(value, &ptr, 10); + case FCGI_INT_T: case FCGI_LONG_T: { + long parsed = strtol(value, &ptr, 10); if (!*value || *ptr) { snprintf(buf, BUFSIZ, "Expected int for '%s' but got '%s'", key, value); FCGI_RejectJSON(context, FCGI_EscapeJSON(buf)); return false; } - break; + + if (FCGI_TYPE(val->flags) == FCGI_INT_T) + *((int*) val->value) = parsed; + else + *((long*) val->value) = parsed; + } break; case FCGI_DOUBLE_T: *((double*) val->value) = strtod(value, &ptr); if (!*value || *ptr) { @@ -292,6 +287,7 @@ void FCGI_BeginJSON(FCGIContext *context, StatusCodes status_code) printf("\t\"module\" : \"%s\"", context->current_module); FCGI_JSONLong("status", status_code); //Time and running statistics + struct timeval now; gettimeofday(&now, NULL); FCGI_JSONDouble("start_time", TIMEVAL_TO_DOUBLE(g_options.start_time)); FCGI_JSONDouble("current_time", TIMEVAL_TO_DOUBLE(now)); @@ -437,19 +433,7 @@ void * FCGI_RequestLoop (void *data) FCGIContext context = {0}; Log(LOGDEBUG, "First request..."); - //TODO: The FCGI_Accept here is blocking. - // That means that if another thread terminates the program, this thread - // will not terminate until the next request is made. while (FCGI_Accept() >= 0) { - - if (Thread_Runstate() != RUNNING) - { - //TODO: Yeah... deal with this better :P - Log(LOGERR, "FIXME; FCGI gets request after other threads have finished."); - printf("Content-type: text/plain\r\n\r\n+++OUT OF CHEESE ERROR+++\n"); - break; - } - Log(LOGDEBUG, "Got request #%d", context.response_number); ModuleHandler module_handler = NULL; char module[BUFSIZ], params[BUFSIZ]; @@ -487,7 +471,6 @@ void * FCGI_RequestLoop (void *data) } Log(LOGDEBUG, "Thread exiting."); - Thread_QuitProgram(false); // NOTE: Don't call pthread_exit, because this runs in the main thread. Just return. return NULL; }