void admin_send_response(xmlDocPtr doc, client_t *client, int response, char *xslt_template) { xmlChar *buff = NULL; int len = 0; ice_config_t *config; char *fullpath_xslt_template; int fullpath_xslt_template_len; char *adminwebroot; client->respcode = 200; if (response == RAW) { xmlDocDumpMemory(doc, &buff, &len); html_write(client, "HTTP/1.0 200 OK\r\n" "Content-Length: %d\r\n" "Content-Type: text/xml\r\n" "\r\n", len); html_write(client, "%s", buff); } if (response == TRANSFORMED) { config = config_get_config(); adminwebroot = config->adminroot_dir; fullpath_xslt_template_len = strlen(adminwebroot) + strlen(xslt_template) + 2; fullpath_xslt_template = malloc(fullpath_xslt_template_len); snprintf(fullpath_xslt_template, fullpath_xslt_template_len, "%s%s%s", adminwebroot, PATH_SEPARATOR, xslt_template); config_release_config(); html_write(client, "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\n" "\r\n"); DEBUG1("Sending XSLT (%s)", fullpath_xslt_template); xslt_transform(doc, fullpath_xslt_template, client); free(fullpath_xslt_template); } if (buff) { xmlFree(buff); } }
void parse_http_request(uint8_t * request) { uint8_t ssid_error = FALSE; uint8_t pass_error = FALSE; uint8_t host_ip_error = FALSE; // First, have to parse it if(html_GET(temp_varchar, request, "SSID=")) { if(is_valid_string(temp_varchar)) { add_new_ssid(temp_varchar, strlen((char *)temp_varchar)); } else { ssid_error = TRUE; } } if(html_GET(temp_varchar, request, "PASS="******"HOST=")) { if(is_valid_string(temp_varchar)) { if(number_of_characters_in_string(temp_varchar, '.') == 3) { // If the number of '.' in the host is equal to 3 add_new_host_ip(temp_varchar, strlen((char *)temp_varchar)); } else { add_new_host_name(temp_varchar, strlen((char *)temp_varchar)); } } else { host_ip_error = TRUE; } } if(html_GET(temp_varchar, request, "reset=")) { reset_setup_info(); } html_reset(); // We use HTTP write instead of HTML write, because this is the HTTP header http_write((uint8_t *)http_header, STRLEN(http_header)); // Had to be broken into multiple parts html_write((uint8_t *)html_header_01, STRLEN(html_header_01)); html_write((uint8_t *)html_header_02, STRLEN(html_header_02)); html_write((uint8_t *)html_header_03, STRLEN(html_header_03)); if(have_new_ssid() && have_new_pass() && have_new_host_ip()) { html_write((uint8_t *)html_instructions_02, STRLEN(html_instructions_02)); } else { html_write((uint8_t *)html_instructions_01, STRLEN(html_instructions_01)); } if(get_number_of_slaves()) { html_write((uint8_t *)html_number_of_slaves_prefix, STRLEN(html_number_of_slaves_prefix)); write_int_to_string(html_number_of_slaves_field,get_number_of_slaves()+1); html_write((uint8_t *)html_number_of_slaves_field, strlen((char *)html_number_of_slaves_field)); html_write((uint8_t *)html_number_of_slaves_suffix, STRLEN(html_number_of_slaves_suffix)); } // SSID Row html_write((uint8_t *)html_ssid_prefix, STRLEN(html_ssid_prefix)); if(have_new_ssid()) { html_write((uint8_t *)get_new_ssid(), strlen((char *)get_new_ssid())); } else { html_write((uint8_t *)html_ssid_form, STRLEN(html_ssid_form)); if(ssid_error) html_write((uint8_t *)html_input_error, STRLEN(html_input_error)); } html_write((uint8_t *)html_ssid_suffix, STRLEN(html_ssid_suffix)); // PASS Row html_write((uint8_t *)html_pass_prefix, STRLEN(html_pass_prefix)); if(have_new_pass()) { html_write((uint8_t *)get_new_pass(), strlen((char *)get_new_pass())); } else { html_write((uint8_t *)html_pass_form, STRLEN(html_pass_form)); if(pass_error) html_write((uint8_t *)html_input_error, STRLEN(html_input_error)); } html_write((uint8_t *)html_pass_suffix, STRLEN(html_pass_suffix)); // PASS Row html_write((uint8_t *)html_host_ip_prefix, STRLEN(html_host_ip_prefix)); if(have_new_host_ip()) { html_write((uint8_t *)get_new_host_ip(), strlen((char *)get_new_host_ip())); } else if (have_new_host_name()) { html_write((uint8_t *)get_new_host_name(), strlen((char *)get_new_host_name())); } else { html_write((uint8_t *)html_host_ip_form, STRLEN(html_host_ip_form)); if(host_ip_error) html_write((uint8_t *)html_input_error, STRLEN(html_input_error)); } html_write((uint8_t *)html_host_ip_suffix, STRLEN(html_host_ip_suffix)); if(have_new_ssid() && have_new_pass() && (have_new_host_ip() || have_new_host_name())) { complete_setup(); } else { html_write((uint8_t *)html_submit_button, STRLEN(html_submit_button)); } html_write((uint8_t *)html_footer, STRLEN(html_footer)); html_send(); return; }