/* * * Created on: Mar 1, 2021 * Author: astrisw */ #pragma once #include #include /* * class UDPProtocol * Implementation of a UDP socket * @member field fd_sock: socket file descriptor * @member field sockaddr_in: struct of the client address. */ namespace inaf::oasbo::ConnectionProtocols { class UDPProtocol: public BaseProtocol { protected: UDPProtocol(std::string ip, int prt); UDPProtocol(); int srv_sock; std::string ip { }; int port; struct sockaddr_in cliaddr; struct sockaddr_in srvaddr; bool split_ip_port(const std::string &ip_port, std::string &ip, std::string &port); int receiveAtLeastHeaderSizeBytes(uint8_t *buff, int headerSize, int packetSize); void resetPacket(PacketLib::BasePacket&, int bytes); public: ~UDPProtocol(); std::string getHost() override; void setHost(std::string host) override; void setIp(std::string); std::string getIp(){return this->ip;} void setPort(int); int getPort(){return this->port;} int connectToClient() override; int closeConnectionToClient() override; bool isConnectedToClient() const override; int receiveFromClient(PacketLib::BasePacket&) override; friend class UDPProtocolBuilder; }; class UDPProtocolBuilder { protected: UDPProtocol *protocol; public: std::string config_target {"udpprotocol"}; std::string ip_key { "ip" }; std::string port_key { "port" }; UDPProtocolBuilder(); UDPProtocolBuilder(std::string ip, int port); ~UDPProtocolBuilder(); void reset(); UDPProtocolBuilder* configFrom(Configurators::BaseConfigurator &conf); UDPProtocolBuilder* setIp(std::string ip); UDPProtocolBuilder* setPort(int port); UDPProtocol* getProtocol(); }; }