#include "plaqui/server/command.h"
#include "plaqui/server/string.h"
#include <algorithm>
+//#include <exception>
#ifdef DEBUG
# include <iostream>
#endif // DEBUG
Command::~Command(void) {
#ifdef DEBUG
- cerr << __FILE__ << ": destructor." << endl;
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": destructor." << endl;
#endif // DEBUG
}
-Command::Command(const string& target, const string& command):
- target(target), command(command) {
+Command::Command(const string& _target, const string& _command) {
#ifdef DEBUG
- cerr << __FILE__ << ": target = " << target << " | "
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": target = " << target << " | "
<< "command = " << command << endl;
#endif // DEBUG
+ set_target(_target);
+ set_command(_command);
}
void Command::build(void) {
- uri = string("/") + target + '/' + command + String::join(args, "/");
+ uri = string("/") + target;
+ if (command.length()) {
+ uri += '/' + command;
+ if (args.size()) {
+ uri += '/' + String::join(args, "/");
+ }
+ }
#ifdef DEBUG
- cerr << __FILE__ << ": build() = " << uri << endl;
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": build() = " << uri << endl;
#endif // DEBUG
}
build();
}
-const std::string& Command::get_target(void) {
+const std::string& Command::get_target(void) const {
return target;
}
build();
}
-const std::string& Command::get_command(void) {
+const std::string& Command::get_command(void) const {
return command;
}
build();
}
-const Command::Arguments& Command::get_args(void) {
+const Command::Arguments& Command::get_args(void) const {
return args;
}
build();
}
-istream& operator>>(istream& is, Command& command) {
+void Command::add_arg(const unsigned& arg) {
#ifdef DEBUG
- cerr << __FILE__ << ": operator>>()" << endl;
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": add_arg(arg = " << arg << ") = "
+ << String().from(arg) << endl;
+#endif // DEBUG
+ args.push_back(String().from(arg));
+ build();
+}
+
+istream& operator>>(istream& is, Command& command)
+ throw(HTTPError, sockerr, ios::failure) {
+#ifdef DEBUG
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": operator>>()" << endl;
#endif // DEBUG
// Obtengo datos del Request HTTP.
is >> static_cast<HTTPRequest&>(command);
} else {
command.target = "";
}
- if (command.args.size() > 1) {
+ if (command.args.size() > 0) {
command.command = command.args[0];
command.args.erase(command.args.begin());
} else {
return is;
}
-ostream& operator<<(ostream& os, const Command& command) {
+ostream& operator<<(ostream& os, const Command& command) throw (sockerr) {
#ifdef DEBUG
- cerr << __FILE__ << ": operator<<()" << endl;
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": operator<<()" << endl;
#endif // DEBUG
// Manda el request HTTP con la URI que representa el comando.
os << static_cast<const HTTPRequest&>(command);