X-Git-Url: https://git.llucax.com/z.facultad/75.42/plaqui.git/blobdiff_plain/bcbe297964b0ad7393385f1dd240448c340ed5ed..b0a202776ab7634c206b495b42e20cfe6492e035:/Server/src/server.cpp?ds=sidebyside diff --git a/Server/src/server.cpp b/Server/src/server.cpp index 37f5c1c..d4dd52a 100644 --- a/Server/src/server.cpp +++ b/Server/src/server.cpp @@ -93,115 +93,138 @@ bool Server::stop_transmission(string host, int port) { /// \todo Implementar. void Server::on_control_command_received(const Command& command, - ControlServer* server) { + ControlServer* controlserver) { #ifdef DEBUG cerr << __FILE__ << ": on_control_command_received(target = " << command.get_target() << ", command = " << command.get_command() << ", args = [" << String::join(command.get_args(), ", ") << "])" << endl; #endif // DEBUG - HTTPResponse response(HTTPMessage::OK); + HTTPResponse* response; + //bool stop_controlserver = false; if (command.get_target() == "server") { -#ifdef DEBUG - cerr << __FILE__ << ": server" << endl; -#endif // DEBUG if (command.get_command() == "status") { - // FIXME - stringstream response_xml; - response_xml << "" << endl; - response_xml << " " << endl; - response_xml << " PlaQui v0.6" << endl; - response_xml << " " << endl; - response_xml << " " << endl; - response_xml << "

PlaQui

" << endl; - response_xml << "

versión 0.6

" << endl; - response_xml << "

Comando

" << endl; - response_xml << " " << endl; - response_xml << "

Desarrollado por

" << endl; - response_xml << " " << endl; - response_xml << "
" << endl; - response_xml << " Copyleft 2003 - bajo los " << endl; - response_xml << " términos de la licencia GPL" << endl; - response_xml << "
" << endl; - response_xml << " " << endl; - response_xml << "" << endl; - response.status_code = HTTPMessage::OK; - response.set_body(response_xml.str()); + response = cmd_server_status(); } else if (command.get_command() == "stop") { - stop = true; - response.set_body("El server se apagará en instantes..."); + finish(); + response = new HTTPResponse(HTTPMessage::OK, + "El server se apagará en instantes..."); } else { - response.status_code = HTTPMessage::NOT_FOUND; - response.set_body("Invalid command for 'server' taget!"); + response = new HTTPResponse(HTTPMessage::NOT_FOUND, + "Invalid command for 'server' taget!"); } } else if (command.get_target() == "connection") { if (command.get_command() == "list") { - // FIXME - TCPServer::ConnectionInfoList cil = get_connected(); - stringstream response_xml; - response_xml << "" << endl; - response_xml << " " << endl; - response_xml << " PlaQui v0.6" << endl; - response_xml << " " << endl; - response_xml << " " << endl; - response_xml << "

PlaQui

" << endl; - response_xml << "

versión 0.6

" << endl; - response_xml << "

Lista de conexiones:

" << endl; - response_xml << " " << endl; - response_xml << "
" << endl; - response_xml << " Copyleft 2003 - bajo los " << endl; - response_xml << " términos de la licencia GPL" << endl; - response_xml << "
" << endl; - response_xml << " " << endl; - response_xml << "" << endl; - response.status_code = HTTPMessage::OK; - response.set_body(response_xml.str()); + response = cmd_connection_list(); } else if (command.get_command() == "stop") { - // TODO server->finish(); - response.set_body("La conexión se cerrará en instantes..."); + response = cmd_connection_stop(command); } else { - response.status_code = HTTPMessage::NOT_FOUND; - response.set_body("Invalid command for 'connection' taget!"); + response = new HTTPResponse(HTTPMessage::NOT_FOUND, + "Invalid command for 'connection' taget!"); } } else if (command.get_target() == "transmission") { - response.status_code = HTTPMessage::NOT_FOUND; - response.set_body("Invalid command for 'transmission' taget!"); + response = new HTTPResponse(HTTPMessage::NOT_FOUND, + "Invalid command for 'transmission' taget!"); } else if (command.get_target() == "plant") { - response.status_code = HTTPMessage::NOT_FOUND; - response.set_body("Invalid command for 'plant' taget!"); + response = new HTTPResponse(HTTPMessage::NOT_FOUND, + "Invalid command for 'plant' taget!"); } else { - response.status_code = HTTPMessage::NOT_FOUND; - response.set_body("Invalid Target!"); + response = new HTTPResponse(HTTPMessage::NOT_FOUND, "Invalid taget!"); } // FIXME - response.headers["Content-Type"] = "text/html; charset=iso-8859-1"; - response.headers["Connection"] = "close"; - server->send(response); + response->headers["Content-Type"] = "text/html; charset=iso-8859-1"; + //response->headers["Connection"] = "close"; + controlserver->send(*response); + delete response; // FIXME con timeout no debería ser necesario. Verificar cabecera Connection // para saber si hay que finish()earlo o no. - // server->finish(); + //if (stop_controlserver) { + // controlserver->finish(); + //} +} + +HTTPResponse* Server::cmd_server_status(void) const { + // FIXME + stringstream response_xml; + response_xml << "" << endl; + response_xml << " " << endl; + response_xml << " PlaQui v0.7" << endl; + response_xml << " " << endl; + response_xml << " " << endl; + response_xml << "

PlaQui

" << endl; + response_xml << "

versión 0.7

" << endl; +/* response_xml << "

Comando

" << endl; + response_xml << " " << endl; +*/ response_xml << "

Desarrollado por

" << endl; + response_xml << " " << endl; + response_xml << "
" << endl; + response_xml << " Copyleft 2003 - bajo los " << endl; + response_xml << " términos de la licencia GPL" << endl; + response_xml << "
" << endl; + response_xml << " " << endl; + response_xml << "" << endl; + return new HTTPResponse(HTTPMessage::OK, response_xml.str()); +} + +HTTPResponse* Server::cmd_connection_list(void) { + // FIXME + TCPServer::ConnectionInfoList cil = get_connected(); + stringstream response_xml; + response_xml << "" << endl; + response_xml << " " << endl; + response_xml << " PlaQui v0.7" << endl; + response_xml << " " << endl; + response_xml << " " << endl; + response_xml << "

PlaQui

" << endl; + response_xml << "

versión 0.7

" << endl; + response_xml << "

Lista de conexiones:

" << endl; + response_xml << " " << endl; + response_xml << "
" << endl; + response_xml << " Copyleft 2003 - bajo los " << endl; + response_xml << " términos de la licencia GPL" << endl; + response_xml << "
" << endl; + response_xml << " " << endl; + response_xml << "" << endl; + return new HTTPResponse(HTTPMessage::OK, response_xml.str()); +} + +HTTPResponse* Server::cmd_connection_stop(const Command& command) { + const Command::Arguments& args = command.get_args(); + Connection::Port port; + if (args.size() < 2) { + return new HTTPResponse(HTTPMessage::CONFLICT, + "Faltan argumentos."); + } else if (disconnect(args[0], String(args[1]).to(port))) { + return new HTTPResponse(HTTPMessage::OK, + string("La conexión a ") + args[0] + ":" + args[1] + + " se cerrará en instantes..."); + } else { + return new HTTPResponse(HTTPMessage::NOT_FOUND, + string("No existe una conexión a ") + args[0] + + ":" + args[1]); + } } } // namespace Server