first commit, base server
This commit is contained in:
81
session_manager.cpp
Normal file
81
session_manager.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
#include "session_manager.h"
|
||||
#include "msql_acces.h"
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/wait.h>
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
|
||||
session_manager::session_manager(int fd)
|
||||
{
|
||||
this->fd=fd;
|
||||
this->data=new msql_acces();
|
||||
}
|
||||
|
||||
bool session_manager::validate_pass(){
|
||||
char* buffer = new char[256];
|
||||
this->read_data(buffer, 256);
|
||||
std::string user=buffer;
|
||||
this->read_data(buffer, 256);
|
||||
std::string pass=buffer;
|
||||
if(this->data->get_passwd(user)==pass){
|
||||
this->write_data("pass");
|
||||
return true;
|
||||
}else{
|
||||
this->write_data("fail");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void session_manager::start_dialog(){
|
||||
char* buffer = new char[5];
|
||||
while(true){
|
||||
this->read_data(buffer,5);
|
||||
if(strcmp(buffer, "exec")==0){
|
||||
this->execute();
|
||||
}else if(strcmp(buffer, "info")==0){
|
||||
this->send_information();
|
||||
}else if(strcmp(buffer,"exit")){
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int session_manager::execute(){
|
||||
char* n_package = new char[256];
|
||||
this->read_data(n_package, 256);
|
||||
this->args=new char*[4];
|
||||
this->args[0]="emerge";
|
||||
this->args[1]="--ask";
|
||||
this->args[2]=n_package;
|
||||
this->args[3]=nullptr;
|
||||
int pid = fork();
|
||||
int status=-2;
|
||||
if(pid==0){
|
||||
if(execvp(this->args[0],this->args)==-1){
|
||||
std::cout << "error inesperado" << std::endl;
|
||||
}
|
||||
exit(0);
|
||||
}else {
|
||||
waitpid(pid, &status, WCONTINUED);
|
||||
if(status>0){
|
||||
this->write_data("ok");
|
||||
}else{
|
||||
this->write_data("bad");
|
||||
}
|
||||
}
|
||||
delete[] (n_package);
|
||||
return status;
|
||||
}
|
||||
|
||||
void session_manager::send_information(){
|
||||
|
||||
}
|
||||
|
||||
int session_manager::read_data(char* input, int size){
|
||||
return read(this->fd, input, size);
|
||||
}
|
||||
|
||||
int session_manager::write_data(std::string output){
|
||||
return write(this->fd, output.data(), output.size());
|
||||
}
|
||||
Reference in New Issue
Block a user