SLP Server
This contains the entry point for the SLP
and starts the SLP Server.
Change-Id: I5976c8168a1af2703143c9bead61583197949115
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..13da385
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,82 @@
+#include <algorithm>
+#include <iomanip>
+
+#include "slp.hpp"
+#include "slp_meta.hpp"
+#include "slp_server.hpp"
+#include "sock_channel.hpp"
+
+
+/* Call Back for the sd event loop */
+static int requestHandler(sd_event_source* es, int fd, uint32_t revents,
+ void* userdata)
+{
+ int rc = slp::SUCCESS;
+ timeval tv{slp::TIMEOUT, 0};
+ udpsocket::Channel channel(fd, tv);
+ std::vector<uint8_t> recvBuff;
+ slp::Message req;
+ std::vector<uint8_t> resp;
+ // Read the packet
+ std::tie(rc, recvBuff) = channel.read();
+
+ if (rc < 0)
+ {
+ std::cerr << "E> SLP Error in Read : " << std::hex << rc << "\n";
+ return rc;
+ }
+
+ switch (recvBuff[0])
+ {
+ case slp::VERSION_2:
+ {
+ std::cout << "SLP Request" << "\n";
+ //print the buffer
+ std::for_each(recvBuff.begin(), recvBuff.end(),
+ [](uint8_t & ch)
+ {
+ std::cout << std::hex << std::setfill('0')
+ << std::setw(2) << (int)ch << ' ' ;
+ });
+ std::cout << "\n";
+ //Parse the buffer and construct the req object
+ std::tie(rc, req) = slp::parser::parseBuffer(recvBuff);
+ if (!rc)
+ {
+ //Passing the req object to handler to serve it
+ std::tie(rc, resp) = slp::handler::processRequest(req);
+ }
+ break;
+ }
+ default:
+ rc = static_cast<uint8_t>(slp::Error::VER_NOT_SUPPORTED);
+ break;
+ }
+
+ //if there was error during Parsing of request
+ //or processing of request then handle the error.
+ if (rc)
+ {
+ std::cerr << "E> SLP Error rc=" << rc << "\n";
+ resp = slp::handler::processError(req, rc);
+ }
+
+ //print and send the response
+ std::cout << "SLP Response" << "\n";
+ std::for_each(resp.begin(), resp.end(),
+ [](uint8_t & ch)
+ {
+ std::cout << std::hex << std::setfill('0')
+ << std::setw(2) << (int)ch << ' ' ;
+ });
+
+ channel.write(resp);
+ return slp::SUCCESS;
+}
+
+
+int main(int argc, char* argv[])
+{
+ slp::udp::Server svr(slp::PORT, requestHandler);
+ return svr.run();
+}