Exemplo n.º 1
0
static boolean index_handler(TinyWebServer& web_server)
{
	D(Serial.println("GET index.html"));
	web_server.send_error_code(200);
	web_server.send_content_type("text/html");
	web_server.end_headers();
	Client& client = web_server.get_client();
	main_page(client);
	return true;
}
Exemplo n.º 2
0
    void handle_request(OptsMap const &config, Database &database,
            Session &session, Request &request,
            std::ostream &fcout, std::istream &fcin)
    {
        (void)session;
        std::string query = request.query();
        try {
            switch (request.type())
            {
            case RequestType::Get:
                header(fcout, config, "Webservice API");
                menu(fcout);
                fcout << "<div class=\"content\">";

                if (query == "main")
                    main_page(database, request, fcout);
                else if (query == "users")
                    users_page(database, config, fcout);
                else if (query == "newuser")
                    newuser_page(database, request, fcout, fcin);
                else if (query == "edituser")
                    edituser_page(database, request, fcout, fcin);
                else if (query == "webserviceapi")
                    static_page("webserviceapi.html", config, fcout);
                else if (query == "changelog")
                    static_page("changelog.html", config, fcout);
                else
                {
                    // TODO: handle 404 better
                    fcout << "Error: 404";
                }

                fcout << "</div>";
                footer(fcout);
                break;
            case RequestType::Post:
                if (query == "newuser")
                    newuser_page(database, request, fcout, fcin);
                else
                {
                    // TODO: 404
                }
                break;
            default:
                // TODO
                break;
            }
        } catch (std::exception const &error)
        {
            LOG_MESSAGE_WARN("Webadmin unknown error: %s", error.what());
        } catch (...)
        {
            LOG_MESSAGE_WARN("Webadmin mysterious unknown error. This should never happen!");
        }
    }
Exemplo n.º 3
0
static boolean config_handler(TinyWebServer& web_server) 
{
	web_server.send_error_code(200);
	web_server.end_headers();

	const char* length_str = web_server.get_header_value("Content-Length");
	int length = atoi(length_str);
	uint32_t start_time = millis();
	StringParse buf;

	EthernetClient client = web_server.get_client();

	while (buf.length() < length && client.connected() && (millis() - start_time < 30000)) {
		if (!client.available()) continue;
		buf += client.readString();
	}

	ParseConfig(buf);
	IP_Config.SaveConfig();

	main_page(client, F("<font color='green'>IP Config saved</font>"));

	return true;
}
Exemplo n.º 4
0
static void file_uploader_handler(TinyWebServer& web_server, TinyWebPutHandler::PutAction action, char* buffer, int size)
{
	static char *boundary = NULL;
	static size_t boundary_len = 0;
	static CircularBuffer<char, 128> cb;
	static enum state { search_begin=0, search_data, in_data} st;
	static int file_size = 0;
	static char *fname;
	
	switch (action) {
	case TinyWebPutHandler::START: 
	{
		fname = web_server.get_file_from_path(web_server.get_path());
		const char *ct = web_server.get_header_value("Content-Type");
		if (!ct) break;
		boundary = strstr(ct, "boundary=");
		if (!boundary) break;
		boundary += 5;
		boundary[0] = '\r';
		boundary[1] = '\n';
		boundary[2] = '-';
		boundary[3] = '-';
		boundary_len = strlen(boundary);
		D(Serial.print("**** Upload file "));
		D(Serial.println(fname));
		free(fname);
		st = search_begin;
		file_size = 0;
		break;
	}

	case TinyWebPutHandler::WRITE:
		for (int i = 0; i < size; i++) {
			D(Serial.write(*buffer));
			cb.push(*buffer++);
			switch(st) {
			case search_begin:
				if (cb.remain() < boundary_len-2) break;
				if (cb.match(boundary+2, boundary_len-2)) {
					st = search_data;
					D(Serial.println("search_data"));
					cb.flush();
				}
				else {
					cb.pop();
				}
				break;
			case search_data:
				if (cb.remain() < 4) break;
				if (cb.match("\r\n\r\n", 4)) {
					st = in_data;
					D(Serial.println("in_data"));
					cb.flush();
				}
				else {
					cb.pop();
				}
				break;
			case in_data:
				if (cb.remain() < boundary_len) break;
				if (cb.match(boundary, boundary_len)) {
					st = search_data;
					D(Serial.println("search_data"));
					cb.flush();
				}
				else {
					if (file_size == 0) lduino.ClearProgram();
					char c = cb.pop();
					file_size++;
					lduino.LoadProgramLine(c);
				}
				break;
			};
		}
		break;

	case TinyWebPutHandler::END:
		D(Serial.println("**** END"));
		D(Serial.print("file size "));
		D(Serial.println(file_size));
		Client& client = web_server.get_client();
		String status;
		if (file_size > 0 && lduino.getProgramReady()) {
			status += F("<font color='green'>New ladder program uploaded - file size: ");
			status += file_size;
			status += F(" bytes</font>");
		}
		else {
			status += F("<font color='red'>Upload aborted</font>");
		}
		main_page(client, status);
		break;
	}
}