#include "Connection.h" #include #include #include #include #include void Connection::p_HandleError(){ std::cout << "an error occured during execution" << std::endl; switch (error) { case ErrorTypes::socket_creation: perror("error while trying to create a file descriptor"); break; case ErrorTypes::get_ip: perror("error while trying to get ip"); break; case ErrorTypes::connect: perror("error while trying to connect"); break; default: std::cerr << "An unknown error occured" << std::endl; } } int Connection::status(){ return static_cast(error); } Connection::Connection(std::string server_ip, int port){ fd = socket(AF_INET, SOCK_STREAM, 0); if (fd < 0){ error = ErrorTypes::socket_creation; } in_addr in_a; if(!inet_aton(server_ip.data(), &in_a)){ error = ErrorTypes::get_ip; } sockaddr_in addr({ AF_INET, htons(port), in_a }); if(connect(fd, (sockaddr*) &addr, sizeof(addr)) != 0){ error = ErrorTypes::connect; } } Connection::~Connection(){ close(fd); } bool Connection::send(std::vector payloads, bool size){ if(size){ unsigned char _size = payloads.size(); ::send(fd, &_size , sizeof(_size), 0); } for (Payload& p : payloads) { ::send(fd, p.getData() , p.getSize(), 0); } return true; } bool Connection::send(Payload payload, bool size){ return send(std::vector{payload}, size); } Payload Connection::recv(){ Payload ret; ssize_t size = 0, bytes; std::vector received(100); while((bytes = ::recv(fd, received.data() + size, 100, 0)) > 0){ size += bytes; received.resize(size+100); } if(bytes == 0){ received.shrink_to_fit(); ret.setData(received); return ret; } //Error Handling error = ErrorTypes::recv; return ret; }