diff --git a/owlps-positioning/Makefile b/owlps-positioning/Makefile index e594cfd..22e0e99 100644 --- a/owlps-positioning/Makefile +++ b/owlps-positioning/Makefile @@ -16,7 +16,7 @@ DEBUG = -g GXXFLAGS = $(DEBUG) -Wall -pedantic LD = g++ LDFLAGS = -lm -LIBS = -lpq -lboost_program_options +LIBS = -lpq -lboost_program_options-mt TARGET = owlps-positioning HEADER = owlps-positioning.hh diff --git a/owlps-positioning/cfg/config.cfg b/owlps-positioning/cfg/owlps-positioning.conf similarity index 55% rename from owlps-positioning/cfg/config.cfg rename to owlps-positioning/cfg/owlps-positioning.conf index 57703a5..670ff77 100644 --- a/owlps-positioning/cfg/config.cfg +++ b/owlps-positioning/cfg/owlps-positioning.conf @@ -1,9 +1,9 @@ -[Server] +[server] port = 9902 mobile-port = 9903 -[BDD] +[db] name = owlps_db -hostaddr = 127.0.0.1 -user = owlps +host = 172.20.105.4 +user = jgraeffly passwd = owlps diff --git a/owlps-positioning/libowlps-positioning.cc b/owlps-positioning/libowlps-positioning.cc index ef968cd..f6af3c0 100644 --- a/owlps-positioning/libowlps-positioning.cc +++ b/owlps-positioning/libowlps-positioning.cc @@ -11,7 +11,6 @@ float round_float(float f, int n) vector explode(const string &input, const char &sep) { - vector vs; string tmp; unsigned int i; @@ -95,4 +94,3 @@ uint64_t timeval_to_ms(const struct timeval &d) { return d.tv_sec * 1000 + d.tv_usec / 1000 ; } - diff --git a/owlps-positioning/owlps-positioning.cc b/owlps-positioning/owlps-positioning.cc index 8e12800..ff2d9b6 100644 --- a/owlps-positioning/owlps-positioning.cc +++ b/owlps-positioning/owlps-positioning.cc @@ -2,60 +2,61 @@ int main(int argc, char** argv) { - - po::options_description desc("Options"); - po::options_description conf("Configuration Positioner"); - po::options_description opt("Aide"); - po::variables_map vm; - - string file = DEFAULT_CONFIG_FILE; + string config_filename = DEFAULT_CONFIG_FILE; int port, mport; - desc.add_options() - ("help", "\t: Affichage de l'aide") - ("file-conf,F", po::value(), "\t: Fichier de configuration") - ("input-topo,T", po::value(), "\t: Input file topology") - ("input-waypoint,W", po::value(), "\t: Input file waypoint") - ("input-refpoint,R", po::value(), "\t: Input file reference point") - ("input-ap,A", po::value(), "\t: Input file accesspoint") + + /* Options spécifiques à la ligne de commandes */ + po::options_description generic("Options générales "); + generic.add_options() + ("help,h", "Affichage de l'aide") + ("config-file,f", po::value(), "Fichier de configuration") + ("input-topo,T", po::value(), "Input file topology") + ("input-waypoint,W", po::value(), "Input file waypoint") + ("input-refpoint,R", po::value(), "Input file reference point") + ("input-ap,A", po::value(), "Input file accesspoint") ; - conf.add_options() - ("Server.port", po::value(&port) -> default_value(9902), "\t: Port du serveur") - ("Server.mobile-port", po::value(&mport) -> default_value(9903), "\t: Port d'envoi vers le mobile") - ("BDD.name", po::value(), "\t: Nom de la BdD") - ("BDD.hostaddr", po::value(), "\t: Adresse de l'hôte de la BdD") - ("BDD.user", po::value(), "\t: Nom de l'utilisateur de la BdD") - ("BDD.passwd", po::value(), "\t: Mot de passe de la BdD") + /* Options ligne de commandes & fichier de configuration */ + po::options_description config("Paramètres "); + config.add_options() + ("server.port,l", po::value(&port) -> default_value(9902), "Port d'écoute du serveur") + ("server.mobile-port,p", po::value(&mport) -> default_value(9903), "Port d'envoi vers le mobile") + ("db.name,D", po::value(), "Nom de la base de données à utiliser") + ("db.host,H", po::value(), "Adresse de l'hôte hébergeant la base de données") + ("db.user,U", po::value(), "Nom de l'utilisateur pour la connexion à la base de données") + ("db.passwd,P", po::value(), "Mot de passe pour la connexion à la base de données") ; - opt.add(desc).add(conf); - po::store(po::parse_command_line(argc, argv, desc), vm); + /* Total des options acceptées en ligne de commandes */ + po::options_description cmd_line_options("Options acceptées ") ; + cmd_line_options.add(generic).add(config) ; - if (vm.count("file-conf")) - file = vm["file-conf"].as(); + /* Parcours de la ligne de commandes */ + po::variables_map vm; + po::store(po::parse_command_line(argc, argv, cmd_line_options), vm) ; - ifstream ifs(file.c_str()); + if (vm.count("help")) // L'utilisateur a demandé l'aide + { + cout << cmd_line_options << endl ; + return 0 ; + } + if (vm.count("config-file")) // L'utilisateur a spécifié un fichier de config + config_filename = vm["file-conf"].as() ; + + ifstream ifs(config_filename.c_str()); if (!ifs.is_open()) - { - cerr << "Erreur lors de la lecture du fichier ! Le fichier n'existe pas ou ne peut être lu.\nUtilisation des valeurs par défaut..." << endl; - } - else - { - po::store(po::parse_config_file(ifs, conf), vm); - } - po::notify(vm); + cerr << "Attention ! Erreur lors de l'ouverture du fichier de configuration « " << config_filename << " » : le fichier n'existe pas ou ne peut être lu.\nUtilisation des valeurs par défaut..." << endl ; + else // Parcours du fichier de config + po::store(po::parse_config_file(ifs, config), vm) ; - if (vm.count("help")) - { - cout << opt << endl; - return 0; - } + po::notify(vm); Server server(port, mport); - if (server.init(vm)) return 1; + if (server.init(vm)) + return 1 ; server.start(); diff --git a/owlps-positioning/owlps-positioning.cfg b/owlps-positioning/owlps-positioning.cfg deleted file mode 100644 index 7098388..0000000 --- a/owlps-positioning/owlps-positioning.cfg +++ /dev/null @@ -1,9 +0,0 @@ -[Server] -port = 9902 -mobile-port = 9903 - -[BDD] -name = owlps_db -hostaddr = 127.0.0.1 -user = julien -passwd = 10,mamci diff --git a/owlps-positioning/owlps-positioning.hh b/owlps-positioning/owlps-positioning.hh index dca5fc6..1bde98a 100644 --- a/owlps-positioning/owlps-positioning.hh +++ b/owlps-positioning/owlps-positioning.hh @@ -11,4 +11,4 @@ using namespace std; namespace po = boost::program_options; -#endif +#endif // _OWLPS_HH_ diff --git a/owlps-positioning/positioning.hh b/owlps-positioning/positioning.hh index 5d9af6c..0ac138f 100644 --- a/owlps-positioning/positioning.hh +++ b/owlps-positioning/positioning.hh @@ -10,7 +10,6 @@ class Positioning { - private: vector reference_point_list; // Liste des points de référence (calibration). float** reference_point_matrix; // Matrice des distances entre les points de référence. @@ -20,7 +19,6 @@ class Positioning map area_list ; // Liste des zones homogènes (pièces). public : - Positioning() {}; ~Positioning() {}; @@ -72,4 +70,4 @@ class Positioning void printAreatList(); }; -#endif +#endif // _POSITIONING_HH_ diff --git a/owlps-positioning/server.cc b/owlps-positioning/server.cc index 62fcc21..468a91e 100644 --- a/owlps-positioning/server.cc +++ b/owlps-positioning/server.cc @@ -1,5 +1,7 @@ #include "server.hh" + + template inline T from_string(const string &s) { @@ -12,6 +14,8 @@ inline T from_string(const string &s) return t; } + + int Server::init(const boost::program_options::variables_map vm) { @@ -19,28 +23,40 @@ int Server::init(const boost::program_options::variables_map vm) string buf; oss << "hostaddr = '"; - if (vm.count("BDD.hostaddr")) - oss << vm["BDD.hostaddr"].as(); + if (vm.count("db.host")) + oss << vm["db.host"].as(); else - oss << DEFAULT_BDD_HOST; + { + cerr << "Attention ! Hôte de la BDD non spécifié, utilisation de la valeur par défaut..." << endl ; + oss << DEFAULT_BDD_HOST; + } oss << "' dbname = '"; - if (vm.count("BDD.name")) - oss << vm["BDD.name"].as(); + if (vm.count("db.name")) + oss << vm["db.name"].as(); else - oss << DEFAULT_BDD_NAME; + { + cerr << "Attention ! Nom de la BDD non spécifié, utilisation de la valeur par défaut..." << endl ; + oss << DEFAULT_BDD_NAME; + } oss << "' user = '"; - if (vm.count("BDD.user")) - oss << vm["BDD.user"].as(); + if (vm.count("db.user")) + oss << vm["db.user"].as(); else - oss << DEFAULT_BDD_USER; + { + cerr << "Attention ! Utilisateur non spécifié pour la connexion à la BDD, utilisation de la valeur par défaut..." << endl ; + oss << DEFAULT_BDD_USER; + } oss << "' password = '"; - if (vm.count("BDD.passwd")) - oss << vm["BDD.passwd"].as() << "'"; + if (vm.count("db.passwd")) + oss << vm["db.passwd"].as() << "'"; else - oss << DEFAULT_BDD_PASS << "'"; + { + cerr << "Attention ! Mot de passe non spécifié pour la connexion à la BDD, utilisation de la valeur par défaut..." << endl ; + oss << DEFAULT_BDD_PASS << "'"; + } buf = oss.str(); @@ -49,7 +65,7 @@ int Server::init(const boost::program_options::variables_map vm) if (PQstatus(conn) != CONNECTION_OK) { - cout << "Connection à la base de donnée échouée: " << PQerrorMessage(conn) << endl; + cout << "Erreur ! Connexion à la base de donnée échouée : " << PQerrorMessage(conn) << endl; return 1; } @@ -64,21 +80,22 @@ int Server::init(const boost::program_options::variables_map vm) if (!pos.checkTopology()) { - cerr << "Erreur lors de la création de la topology" << endl; + cerr << "Erreur lors de la création de la topologie !" << endl; return 1; } pos.makeReferencePointDistances(); - if (vm.count("input-ap")) pos.makeApListFromFile(vm["input-ap"].as()); - else pos.makeApListFromDb(conn); + if (vm.count("input-ap")) + pos.makeApListFromFile(vm["input-ap"].as()) ; + else + pos.makeApListFromDb(conn) ; return 0; } int Server::start() { - struct sockaddr_in serv_addr; struct sockaddr_in client; socklen_t client_len = sizeof(client); @@ -138,9 +155,10 @@ int Server::start() } } + + void Server::treatment() { - Point solution; int id_request; @@ -198,6 +216,8 @@ void Server::treatment() free(mac); } + + void Server::createResult(Point solution, int id_request, string use_algo) { @@ -228,9 +248,10 @@ void Server::createResult(Point solution, int id_request, string use_algo) PQclear(res); } + + void Server::sendToClient(Point solution, char *mac) { - int sockfd ; // Descripteur de la socket struct sockaddr_in serv; struct sockaddr_in mobile; diff --git a/owlps-positioning/treatment.hh b/owlps-positioning/treatment.hh index 9e300e5..e6e0d3f 100644 --- a/owlps-positioning/treatment.hh +++ b/owlps-positioning/treatment.hh @@ -9,7 +9,6 @@ class Treatment { - private: vector access_point_list; vector reference_point_list; @@ -43,4 +42,4 @@ class Treatment Point getkWeightedInSs(const unsigned int &k, const Point *point_ignored)const ; }; -#endif +#endif // _TREATMENT_HH_