From ee0c106236c8c9587e69f2c30848ed66b84c2ced Mon Sep 17 00:00:00 2001 From: Aadhavan Srinivasan Date: Wed, 14 Feb 2024 08:08:58 -0500 Subject: [PATCH] Made 'Client' and 'Server' children of 'Sock' class --- includes/client.hpp | 64 +++++----------------------------------- includes/server.hpp | 71 ++++++++------------------------------------- 2 files changed, 19 insertions(+), 116 deletions(-) diff --git a/includes/client.hpp b/includes/client.hpp index 308aced..a47a1f1 100644 --- a/includes/client.hpp +++ b/includes/client.hpp @@ -1,77 +1,27 @@ -#include "easysock.hpp" -#include -#include -#include "exception_consts.hpp" +#include "sock.hpp" /* Client class - Defines a TCP/UDP client. - The constructor takes in a **remote** address and port, and connects the client to that address/port. */ -class Client { -private: - int ip_ver; - char protocol; - int port; - int sock_fd; - std::string address; +class Client : public Sock { +private: void create_socket() { - struct sockaddr* dest = (struct sockaddr *)malloc(sizeof(struct sockaddr)); + Sock::create_socket(); this->sock_fd = create_remote(this->ip_ver, this->protocol, this->address.data(), this->port, dest); if (sock_fd < 0) { if (sock_fd * -1 == ECONNREFUSED) { throw EXCEPT_CONNREFUSED; } } + } public: Client() {} - Client(int ip_ver, char protocol, const char* address, int port) { - /* Error checking */ - if (ip_ver != 4 && ip_ver != 6) { - throw std::invalid_argument("Invalid IP address type"); - } - if (port < 1024 || port > 65535) { - throw std::invalid_argument("Invalid port"); - } - if (protocol != 'T' && protocol != 'U') { - throw std::invalid_argument("Invalid protocol"); - } - - this->ip_ver = ip_ver; - this->protocol = protocol; - this->port = port; - this->address = std::string(address); - - /* Check to see if the given IP address matches the given ip_ver */ - if ((check_ip_ver(address) != 6 && ip_ver == 6) || (check_ip_ver(address) != 4 && ip_ver == 4)) { - throw std::invalid_argument("Invalid IP address for given type."); - } - - try { - create_socket(); - } catch (int e) { - throw; - } - } - - void sendAll(std::string to_send) { - int str_length = to_send.length(); - int num_bytes_sent = 0; /* Number of bytes sent in one call to send */ - int total_bytes_sent = 0; /* Total number of bytes sent */ - - while (total_bytes_sent < str_length) { - num_bytes_sent = send(this->getSockFD(), to_send.substr(total_bytes_sent).data(), str_length - total_bytes_sent, 0); - total_bytes_sent += num_bytes_sent; - } - - return; - } - - int getSockFD() { - return sock_fd; - } + Client(int ip_ver, char protocol, const char* address, int port) : Sock(ip_ver, protocol, address, port) {} +/* TODO - Add comments to better explain the inheritance and polymorphism going on */ }; diff --git a/includes/server.hpp b/includes/server.hpp index b1d9500..72c0556 100644 --- a/includes/server.hpp +++ b/includes/server.hpp @@ -1,75 +1,28 @@ -#include "easysock.hpp" -#include -#include -#include "exception_consts.hpp" +#include "sock.hpp" + /* Server class - Defines a TCP/UDP server. -- The constructor takes in a **local** address and port, on which the server listens. +- The constructor takes in a **local** address and port, and creates a listening socket on that address/port. */ -class Server { -private: - int ip_ver; - char protocol; - int port; - int sock_fd; - std::string address; +class Server : public Sock { +private: void create_socket() { - struct sockaddr* dest = (struct sockaddr *)malloc(sizeof(struct sockaddr)); - this->sock_fd = create_local(this->ip_ver, this->protocol, this->address.data(), this->port, dest); + Sock::create_socket(); + this->sock_fd = create_local(this->ip_ver, this->protocol, this->address.data(), this->port, dest); if (sock_fd < 0) { - if (sock_fd * -1 == EADDRNOTAVAIL) { - throw EXCEPT_ADDRNOTAVAIL; + if (sock_fd * -1 == ECONNREFUSED) { + throw EXCEPT_CONNREFUSED; } } + } public: Server() {} - Server(int ip_ver, char protocol, const char* address, int port) { - /* Error checking */ - if (ip_ver != 4 && ip_ver != 6) { - throw std::invalid_argument("Invalid IP address type"); - } - if (port < 1024 || port > 65535) { - throw std::invalid_argument("Invalid port"); - } - if (protocol != 'T' && protocol != 'U') { - throw std::invalid_argument("Invalid protocol"); - } - - this->ip_ver = ip_ver; - this->protocol = protocol; - this->port = port; - this->address = std::string(address); - - /* Check to see if the given IP address matches the given ip_ver */ - if ((check_ip_ver(address) != 6 && ip_ver == 6) || (check_ip_ver(address) != 4 && ip_ver == 4)) { - throw std::invalid_argument("Invalid IP address for given type."); - } - - try { - create_socket(); - } catch (int e) { - throw; - } - } - - - std::string recvAll() { - std::string string = std::string(); - char* buffer = (char *)malloc(100); - while (recv(this->getSockFD(), buffer, 100, 0) != 0) { - string.append(std::string(buffer)); - } - - return string; - } - - int getSockFD() { - return sock_fd; - } + Server(int ip_ver, char protocol, const char* address, int port) : Sock(ip_ver, protocol, address, port) {} +/* TODO - Add comments to better explain the inheritance and polymorphism going on */ };