/* parse an url parameter (that looks like "foo=plop") and fill a key_value structure */ void parse_key_value(char* str, struct key_value* key_value) { char* saveptr; char* key, *value; key = strtok_r(str, "=", &saveptr); value = strtok_r(NULL, "=", &saveptr); strncpy(key_value->key, key, MAX_URL_LENGTH); strncpy(key_value->value, value, MAX_VALUE_LENGTH); } /* Parse a get url that looks like "/display?user=plip&foo=plop&bar=plup" and fill a * page_request structure */ void parse_url(char* url, struct page_request *page_request) { char* param[MAX_NB_PARAMETERS]; int nb_param = 0; char* saveptr; /* extract page name */ char* page_url = strtok_r(url, "/", &saveptr); if(page_url) { /* extract parameters */ page_url=strtok_r(page_url, "?", &saveptr); if(page_url) { param[0] = strtok_r(NULL, "&", &saveptr); if(param[0]) { /* there's at least one parameter */ parse_key_value(param[0], &page_request->parameters[0]); /* the other parameters are separated with & */ for(int i =1; iparameters[i]); } } } strncpy(page_request->url, page_url, MAX_URL_LENGTH); } else { strncpy(page_request->url, "", MAX_URL_LENGTH); } page_request->nb_param = nb_param; }