[Libreoffice-commits] online.git: Branch 'private/Ashod/nonblocking' - net/loolnb.cpp net/Socket.hpp net/WebSocketHandler.hpp

Michael Meeks michael.meeks at collabora.com
Fri Feb 24 16:46:07 UTC 2017


 net/Socket.hpp           |   15 +++++++
 net/WebSocketHandler.hpp |    5 +-
 net/loolnb.cpp           |   89 ++++++++++++++++++++++++++---------------------
 3 files changed, 69 insertions(+), 40 deletions(-)

New commits:
commit 0903776a57fda95ea6b59e33a632636c585cf0c1
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Fri Feb 24 16:45:31 2017 +0000

    Cleanup logging, and add message tracing / dumper.

diff --git a/net/Socket.hpp b/net/Socket.hpp
index 08112c5..59be92b 100644
--- a/net/Socket.hpp
+++ b/net/Socket.hpp
@@ -27,6 +27,8 @@
 
 #include <Poco/Net/SocketAddress.h>
 
+#include "Log.hpp"
+
 /// A non-blocking, streaming socket.
 class Socket
 {
@@ -321,6 +323,13 @@ public:
         // Always try to read.
         closeSocket = !readIncomingData();
 
+        auto& log = Log::logger();
+        if (log.trace()) {
+            LOG_TRC("Incoming data buffer " << _inBuffer.size() <<
+                    " closeSocket? " << closeSocket << "\n");
+            log.dump("", &_inBuffer[0], _inBuffer.size());
+        }
+
         // If we have data, allow the app to consume.
         size_t oldSize = 0;
         while (!_inBuffer.empty() && oldSize != _inBuffer.size())
@@ -383,6 +392,12 @@ public:
             do
             {
                 len = writeData(&_outBuffer[0], _outBuffer.size());
+
+                auto& log = Log::logger();
+                if (log.trace()) {
+                    LOG_TRC("Wrote outgoing data " << len << " bytes\n");
+                    log.dump("", &_outBuffer[0], len);
+                }
             }
             while (len < 0 && errno == EINTR);
 
diff --git a/net/WebSocketHandler.hpp b/net/WebSocketHandler.hpp
index 286ac53..324da6b 100644
--- a/net/WebSocketHandler.hpp
+++ b/net/WebSocketHandler.hpp
@@ -10,6 +10,7 @@
 #ifndef INCLUDED_WEBSOCKETHANDLER_HPP
 #define INCLUDED_WEBSOCKETHANDLER_HPP
 
+#include "Log.hpp"
 #include "Socket.hpp"
 
 class WebSocketHandler : public SocketHandlerInterface
@@ -55,7 +56,7 @@ public:
     /// Implementation of the SocketHandlerInterface.
     virtual void handleIncomingMessage() override
     {
-        std::cerr << "incoming message with buffer size " << _socket->_inBuffer.size() << "\n";
+        LOG_TRC("incoming WebSocket message");
         if (_wsState == HTTP)
         {
             handleWebsocketUpgrade();
@@ -129,7 +130,7 @@ public:
     }
 
     void sendMessage(const std::vector<char> &data,
-                        WSOpCode code = WSOpCode::Binary)
+                     WSOpCode code = WSOpCode::Binary)
     {
         size_t len = data.size();
         bool fin = false;
diff --git a/net/loolnb.cpp b/net/loolnb.cpp
index 201f8a4..489cfa7 100644
--- a/net/loolnb.cpp
+++ b/net/loolnb.cpp
@@ -21,6 +21,7 @@
 #include <Poco/MemoryStream.h>
 #include <Poco/Net/SocketAddress.h>
 #include <Poco/Net/HTTPRequest.h>
+#include <Poco/Util/ServerApplication.h>
 #include <Poco/StringTokenizer.h>
 #include <Poco/Runnable.h>
 #include <Poco/Thread.h>
@@ -145,54 +146,66 @@ void server(const Poco::Net::SocketAddress& addr, SocketPoll& clientPoller,
     }
 }
 
-int main(int argc, const char**argv)
+class LOOLNB : public Poco::Util::ServerApplication
 {
-    // TODO: These would normally come from config.
-    SslContext::initialize("/etc/loolwsd/cert.pem",
-                           "/etc/loolwsd/key.pem",
-                           "/etc/loolwsd/ca-chain.cert.pem");
-
-    // Used to poll client sockets.
-    SocketPoll poller;
-
-    // Start the client polling thread.
-    Thread threadPoll([&poller](std::atomic<bool>& stop)
+public:
+    int main(const std::vector<std::string>& args) override
     {
-        while (!stop)
+        const char* logLevel = std::getenv("LOOL_LOGLEVEL");
+        std::map<std::string, std::string> props;
+        if (logLevel)
+            Log::initialize("loolnb", logLevel ? logLevel : "",
+                            false, false, props);
+
+        // TODO: These would normally come from config.
+        SslContext::initialize("/etc/loolwsd/cert.pem",
+                               "/etc/loolwsd/key.pem",
+                               "/etc/loolwsd/ca-chain.cert.pem");
+
+        // Used to poll client sockets.
+        SocketPoll poller;
+
+        // Start the client polling thread.
+        Thread threadPoll([&poller](std::atomic<bool>& stop)
+                          {
+                              while (!stop)
+                              {
+                                  poller.poll(5000);
+                              }
+                          });
+
+        class PlainSocketFactory : public SocketFactory
         {
-            poller.poll(5000);
-        }
-    });
+            std::shared_ptr<Socket> create(const int fd) override
+                {
+                    return std::make_shared<StreamSocket>(fd, new SimpleResponseClient());
+                }
+        };
 
-    class PlainSocketFactory : public SocketFactory
-    {
-        std::shared_ptr<Socket> create(const int fd) override
+        class SslSocketFactory : public SocketFactory
         {
-            return std::make_shared<StreamSocket>(fd, new SimpleResponseClient());
-        }
-    };
+            std::shared_ptr<Socket> create(const int fd) override
+                {
+                    return std::make_shared<SslStreamSocket>(fd, new SimpleResponseClient());
+                }
+        };
 
-    class SslSocketFactory : public SocketFactory
-    {
-        std::shared_ptr<Socket> create(const int fd) override
-        {
-            return std::make_shared<SslStreamSocket>(fd, new SimpleResponseClient());
-        }
-    };
 
+        // Start the server.
+        if (args.back() == "ssl")
+            server(addrSsl, poller, std::unique_ptr<SocketFactory>{new SslSocketFactory});
+        else
+            server(addrHttp, poller, std::unique_ptr<SocketFactory>{new PlainSocketFactory});
 
-    // Start the server.
-    if (!strcmp(argv[argc-1], "ssl"))
-        server(addrSsl, poller, std::unique_ptr<SocketFactory>{new SslSocketFactory});
-    else
-        server(addrHttp, poller, std::unique_ptr<SocketFactory>{new PlainSocketFactory});
+        std::cout << "Shutting down server." << std::endl;
 
-    std::cout << "Shutting down server." << std::endl;
+        threadPoll.stop();
 
-    threadPoll.stop();
+        SslContext::uninitialize();
+        return 0;
+    }
+};
 
-    SslContext::uninitialize();
-    return 0;
-}
+POCO_SERVER_MAIN(LOOLNB)
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list