net/loolnb.cpp | 25 +++++++++++++++---------- net/socket.hpp | 13 +++++-------- wsd/LOOLWSD.cpp | 1 + 3 files changed, 21 insertions(+), 18 deletions(-)
New commits: commit 41c99e9132fc5d47314a804ba9333ef0dc47b4d1 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Mon Feb 20 23:43:05 2017 -0500 nb: throw when we run out of resources Change-Id: I12fd236bffd50dbf7a1bb9eb4c665ea9d9d545e4 diff --git a/net/socket.hpp b/net/socket.hpp index e8782ea..7ce7378 100644 --- a/net/socket.hpp +++ b/net/socket.hpp @@ -157,10 +157,7 @@ public: // Create the wakeup fd. if (::pipe2(_wakeup, O_CLOEXEC | O_NONBLOCK) == -1) { - // FIXME: Can't have wakeup pipe, should we exit? - // FIXME: running out of sockets should be a case we handle elegantly here - and also in our accept / ClientSocket creation I guess. - _wakeup[0] = -1; - _wakeup[1] = -1; + throw std::runtime_error("Failed to allocate pipe for SocketPoll waking."); } } commit 6bf8e544af843626774f36efb8d1b9422d260d30 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Mon Feb 20 23:28:20 2017 -0500 nb: read to the end of the full buffer Change-Id: I94264f748ac974f636ab6d21a5ccbb77532136f6 diff --git a/net/socket.hpp b/net/socket.hpp index 1c16124..e8782ea 100644 --- a/net/socket.hpp +++ b/net/socket.hpp @@ -339,19 +339,18 @@ public: // TODO: Cap the buffer size, lest we grow beyond control. do { - len = readData(buf, sizeof(buf) - 1); + len = readData(buf, sizeof(buf)); } while (len < 0 && errno == EINTR); if (len > 0) { - assert (len < ssize_t(sizeof(buf))); + assert (len <= ssize_t(sizeof(buf))); _inBuffer.insert(_inBuffer.end(), &buf[0], &buf[len]); - continue; } // else poll will handle errors. } - while (len == (sizeof(buf) - 1)); + while (len == (sizeof(buf))); return len != 0; // zero is eof / clean socket close. } commit 8aa0ce9168f6441b081f2b2bb359bf37caea527d Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Mon Feb 20 23:18:54 2017 -0500 nb: assert on trying to write empty data Change-Id: Ie18b5d00acf769a112b47d45f8c7783fb5746acf diff --git a/net/socket.hpp b/net/socket.hpp index d9b5842..1c16124 100644 --- a/net/socket.hpp +++ b/net/socket.hpp @@ -359,6 +359,7 @@ public: /// Override to write data out to socket. virtual void writeOutgoingData() { + assert(!_outBuffer.empty()); while (!_outBuffer.empty()) { ssize_t len; commit 8617d456e441887b497505d76a761e8ce260eb77 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Mon Feb 20 23:13:11 2017 -0500 nb: fixme for HTTP handling Change-Id: I4364e2e4cd3233134c026890ce690abaf46b961d diff --git a/net/loolnb.cpp b/net/loolnb.cpp index ce7872f..a25007d 100644 --- a/net/loolnb.cpp +++ b/net/loolnb.cpp @@ -60,8 +60,11 @@ public: req.read(message); // if we succeeded - remove that from our input buffer - // An HTTP request is either parsed completely and successfully, or not. - // We can't have partial read, even though Poco seems to not report full read. + // FIXME: We should check if this is GET or POST. For GET, we only + // can have a single request (headers only). For POST, we can/should + // use Poco HTMLForm to parse the post message properly. + // Otherwise, we should catch exceptions from the previous read/parse + // and assume we don't have sufficient data, so we wait some more. T::_inBuffer.clear(); StringTokenizer tokens(req.getURI(), "/?"); commit c79a6a99eabd6598fea8bd1d0f5339c751ab0804 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Mon Feb 20 21:58:59 2017 -0500 nb: comment to replace ConsoleCertificateHandler ConsoleCertificateHandler will block on stdin when a certificate error occures. This is hardly helpful to users. Although in a server environment this is likely to go to the journal, we should properly log it and shutdown, rather than hang waiting for the unlikely console input. Change-Id: I54bb38ec60f443c579ef20dbb759941fae182e5b diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index c910f98..9b475e6 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -2011,6 +2011,7 @@ void LOOLWSD::initializeSSL() // Don't ask clients for certificate sslParams.verificationMode = Poco::Net::Context::VERIFY_NONE; + // FIXME: ConsoleCertificateHandler will block on stdin upon error! Poco::SharedPtr<Poco::Net::PrivateKeyPassphraseHandler> consoleHandler = new Poco::Net::KeyConsoleHandler(true); Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> invalidCertHandler = new Poco::Net::ConsoleCertificateHandler(true); commit e0fddee17d5182d07fe6ef8a454b70210aeaad65 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Mon Feb 20 21:35:58 2017 -0500 nb: safer endianness conversion Change-Id: I63977e6e99119fef2a61911d07d645a606d4c443 diff --git a/net/loolnb.cpp b/net/loolnb.cpp index b86e4e7..ce7872f 100644 --- a/net/loolnb.cpp +++ b/net/loolnb.cpp @@ -221,19 +221,21 @@ public: { header[1] |= 126; T::_outBuffer.push_back((char)header[1]); - char* p = reinterpret_cast<char*>(&len); - T::_outBuffer.push_back(p[1]); - T::_outBuffer.push_back(p[0]); + T::_outBuffer.push_back(static_cast<char>((len >> 8) & 0xff)); + T::_outBuffer.push_back(static_cast<char>((len >> 0) & 0xff)); } else { header[1] |= 127; T::_outBuffer.push_back((char)header[1]); - char* p = reinterpret_cast<char*>(&len); - for (int i = 7; i >= 0; --i) - { - T::_outBuffer.push_back(p[i]); - } + T::_outBuffer.push_back(static_cast<char>((len >> 56) & 0xff)); + T::_outBuffer.push_back(static_cast<char>((len >> 48) & 0xff)); + T::_outBuffer.push_back(static_cast<char>((len >> 40) & 0xff)); + T::_outBuffer.push_back(static_cast<char>((len >> 32) & 0xff)); + T::_outBuffer.push_back(static_cast<char>((len >> 24) & 0xff)); + T::_outBuffer.push_back(static_cast<char>((len >> 16) & 0xff)); + T::_outBuffer.push_back(static_cast<char>((len >> 8) & 0xff)); + T::_outBuffer.push_back(static_cast<char>((len >> 0) & 0xff)); } // FIXME: pick random number and mask in the outbuffer etc. _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits