Anfrage soll schlafen
-
Ich habe folgendes Problem: Ich schreibe zur Zeit an einem Messframework für den Apache Webserver. Jetzt muss ich ein paar Kleinigkeiten in den Apache einprogrammieren in C. Soweit klappt alles, ich bin jetzt aber an einer Stelle, wo ich einfach nicht den Fehler finde.
Ich möchte folgendes erreichen, wenn man im Browser die Url localhost/apmfw/Testseite.html?1000&200 aufruft, dann soll die Anfragenbearbeitung so lange schlafen, wie der erste Parameter (hier 1000) angibt. Hier zunächst mal ein kleiner Codeausschnitt://URL überprüfen int apmfw_check_url(char *url) { if (apr_strnatcasecmp(url, "/apmfw/start.html") == 0) { apmfw_start(); } else if (apr_strnatcasecmp(url, "/apmfw/stop.html") == 0) { apmfw_stop(); } else if (strstr(url, "Testseite.html")) { apr_sleep(apmfw_get_first_param(url) * 1000); } return APR_SUCCESS; } //Ersten Parameter auslesen int apmfw_get_first_param(char *url) { char* s = url; char* res1; char* res2; res1 = strsep(&s,"?"); res2 = strsep(&s,"&"); return atoi(res2); }
In die obere Funktion gelangt man, wenn der Apache einen Request empfängt, er führt dann zunächst diesen Befehl aus:
apmfw_check_url(r->parsed_uri.path);
Ich weiß, dass er auf jeden Fall die Funktion betritt, und bei den HTMLs start.html und stop.html klappt es auch. Es klappt aber nicht bei Testseite.hmtl, wo er ja diese Zeile ausführen soll:
apr_sleep(apmfw_get_first_param(url) * 1000);
Ersetze ich diese Zeile jedoch mit
apr_sleep(1000000);
dann schläft er die angegebene Zeit. Der Fehler muss also irgendwo in apmfw_get_first_param(char* url) liegen.
-
debuggen? einzelschritt? variablen ansehen?
-
Ich habe den Fehler nun gefunden. Es lag ganz einfach daran, dass die Parameter, die an der URL hängen sollten, garnicht mit übergeben wurden. Man muss einfach r->parsed_url.query nehmen und nicht r->parsed_url.path