diff --git a/src/core/main.cpp b/src/core/main.cpp index d2ef33e..b6eef61 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -15,16 +15,21 @@ int main(int args, char **argv) { for ( unsigned index = 0; index < args; ++index ) { arguments.push_back (argv[index]); } + Logger logger(Logger::DEBUG); + try{ + ConfigManager cfg(logger, arguments); + EventBus eventBus(logger); + Resolver::Server resolver(logger, eventBus); - Logger logger(Logger::DEBUG); - EventBus eventBus(logger); - ConfigManager cfg(logger, arguments); - Resolver::Server resolver(logger, eventBus); - - //Record testrec = ARecord(); - - logger.debug.ln ("PlaiNS successfully started."); - + //Record testrec = ARecord(); + logger.debug.ln ("Running DNS resolver..."); + resolver.run(); + logger.debug.ln ("PlaiNS successfully started."); + } + catch (std::exception& e) + { + logger.debug << "Exception: " << e.what() << Logger::commit; + } return 0; } diff --git a/src/resolver/CMakeLists.txt b/src/resolver/CMakeLists.txt index d3923d9..06a4d13 100644 --- a/src/resolver/CMakeLists.txt +++ b/src/resolver/CMakeLists.txt @@ -3,4 +3,4 @@ add_library(Resolver OBJECT Server.cpp Message.cpp) target_include_directories(Resolver PUBLIC include) -target_link_libraries(Resolver PRIVATE Core PUBLIC Asio) +target_link_libraries(Resolver PRIVATE Core DNS PUBLIC Asio) diff --git a/src/resolver/Server.cpp b/src/resolver/Server.cpp index 7090b92..6e6f7d9 100644 --- a/src/resolver/Server.cpp +++ b/src/resolver/Server.cpp @@ -1,11 +1,19 @@ #include "Server.hpp" -#include -//Testing: #include "Message.hpp" +#include + +#include +#include +#include +#include +#include + namespace Plains { namespace Resolver { +using asio::ip::udp; + static char* byteToHex(char c) { static char* out = new char[3]; out[2] = 0x0; //Terminate string @@ -31,7 +39,10 @@ static char* intToHex(unsigned byteCount, int c) { return out; } -Server::Server(Logger& logger, EventBus& eventBus) : logger(logger), eventBus(eventBus) { +Server::Server(Logger& logger, EventBus& eventBus) + : logger(logger), + eventBus(eventBus) +{ logger.debug << "Testing some stuff..." << Logger::commit; logger.debug << "Message header overall size: " << sizeof(Message::Header) << Logger::commit; // logger.debug << "Message::Header size:" << sizeof(Message::Header) << endl; @@ -62,14 +73,48 @@ Server::Server(Logger& logger, EventBus& eventBus) : logger(logger), eventBus(ev "Answer Record Count: " << intToHex(2, header->anCount) << Logger::commit << "Authority Record Count: " << intToHex(2, header->nsCount) << Logger::commit << "Additional Record Count: " << intToHex(2, header->arCount) << Logger::commit; - myfile.close(); + //Testing over + + socket_ = new udp::socket(io_context, udp::endpoint(udp::v4(), 8853)); } Server::~Server() { } +void Server::run() { + io_context.run(); + do_receive(); +} + +void Server::do_receive() +{ + socket_->async_receive_from( + asio::buffer(data_, 1024), sender_endpoint_, + [this](std::error_code ec, std::size_t bytes_recvd) + { + if (!ec && bytes_recvd > 0) + { + do_send(bytes_recvd); + } + else + { + do_receive(); + } + }); +} + +void Server::do_send(std::size_t length) +{ + socket_->async_send_to( + asio::buffer(data_, length), sender_endpoint_, + [this](std::error_code /*ec*/, std::size_t /*bytes_sent*/) + { + do_receive(); + }); +} + }} diff --git a/src/resolver/include/Server.hpp b/src/resolver/include/Server.hpp index 571458f..6870aae 100644 --- a/src/resolver/include/Server.hpp +++ b/src/resolver/include/Server.hpp @@ -2,7 +2,7 @@ #define SERVER_HPP #include "asio.hpp" #include "Core.hpp" -#include +//#include namespace Plains { @@ -10,7 +10,6 @@ namespace Resolver { using Core::EventBus; using Core::Logger; -using asio::ip::udp; class Server @@ -19,10 +18,16 @@ class Server EventBus& eventBus; Logger& logger; asio::io_context io_context; + asio::ip::udp::socket* socket_; + asio::ip::udp::endpoint sender_endpoint_; + char data_[1024]; + void do_receive(); + void do_send(std::size_t length); public: Server(Logger& logger, EventBus& eventBus); ~Server(); + void run(); };