net/clientnb.cpp | 8 -------- net/common.hpp | 48 ------------------------------------------------ net/loolnb.cpp | 30 ++++++++++++++++++++---------- net/socket.hpp | 6 +++--- 4 files changed, 23 insertions(+), 69 deletions(-)
New commits: commit 84094a1d6e582d8caa7946855bfb1b873ae7f593 Author: Michael Meeks <[email protected]> Date: Thu Feb 16 11:00:38 2017 +0000 Lean on Poco for request parsing. diff --git a/net/clientnb.cpp b/net/clientnb.cpp index 99bda95..a8ec054 100644 --- a/net/clientnb.cpp +++ b/net/clientnb.cpp @@ -35,8 +35,6 @@ #include <Poco/Util/Option.h> #include <Poco/Util/OptionSet.h> -#include "common.hpp" - using Poco::Net::HTTPClientSession; using Poco::Net::HTTPRequest; using Poco::Net::HTTPResponse; @@ -104,17 +102,11 @@ struct Session } }; -void testParseHTTP() -{ -} - struct Client : public Poco::Util::Application { public: int main(const std::vector<std::string>& /* args */) override { - testParseHTTP(); - Session first("init"); Session second("init"); diff --git a/net/common.hpp b/net/common.hpp deleted file mode 100644 index da1ca25..0000000 --- a/net/common.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#ifndef NB_COMMON_HPP -#define NB_COMMON_HPP - -typedef std::vector<std::string> HeaderStrings; -typedef std::vector<unsigned char> Payload; - -// FIXME: lots of return conditions: -// partial data, malicious/invalid data, complete data -// does this belong in a separate method ? -size_t parseHTTP(const std::vector<unsigned char> data, - HeaderStrings &headers, Payload & /* payload */) -{ - size_t i, start; - for (i = start = 0; i < data.size(); ++i) - { - unsigned char c = data[i]; - if (c == 0) - { // someone doing something cute. - return -1; - } - if (c == '\r' || c == '\n') - { - std::string header(reinterpret_cast<const char *>(&data[start]), i - start); - while (++i < data.size() && - (data[i] == '\n' || data[i] == '\r')) - {} - start = i; - // terminating \r\n - if (header.size() == 0) - break; - headers.push_back(header); - } - } - return i; -} - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/net/loolnb.cpp b/net/loolnb.cpp index a6a94eb..963a631 100644 --- a/net/loolnb.cpp +++ b/net/loolnb.cpp @@ -18,10 +18,15 @@ #include <thread> #include <assert.h> +#include <Poco/MemoryStream.h> #include <Poco/Net/SocketAddress.h> +#include <Poco/Net/HTTPRequest.h> +#include <Poco/StringTokenizer.h> + +using Poco::MemoryInputStream; +using Poco::StringTokenizer; #include "socket.hpp" -#include "common.hpp" constexpr int PortNumber = 9191; @@ -36,17 +41,22 @@ public: { std::cerr << "message had size " << _inBuffer.size() << "\n"; - HeaderStrings headers; - Payload payload; - size_t skip; - if ((skip = parseHTTP(_inBuffer, headers, payload) > 0)) + int number = 0; + MemoryInputStream message(&_inBuffer[0], _inBuffer.size()); + Poco::Net::HTTPRequest req; + req.read(message); + + StringTokenizer tokens(req.getURI(), "/?"); + if (tokens.count() == 4) { - for (auto i = headers.begin(); i != headers.end(); ++i) - { - std::cerr << "header '" << *i << "'\n"; - } + std::string subpool = tokens[2]; + number = std::stoi(tokens[3]); } - // else close socket ? ... + else + std::cerr << " unknown tokens " << tokens.count() << std::endl; + + // complex algorithmic core: + number = number + 1; std::ostringstream oss; oss << "HTTP/1.1 200 OK\r\n" diff --git a/net/socket.hpp b/net/socket.hpp index 3b55405..f41befc 100644 --- a/net/socket.hpp +++ b/net/socket.hpp @@ -282,8 +282,8 @@ public: } protected: - std::vector< unsigned char > _inBuffer; - std::vector< unsigned char > _outBuffer; + std::vector< char > _inBuffer; + std::vector< char > _outBuffer; public: HandleResult handlePoll( int events ) override @@ -307,7 +307,7 @@ public: bool readIncomingData() { ssize_t len; - unsigned char buf[4096]; + char buf[4096]; do { len = ::read(getFD(), buf, sizeof(buf)); } while (len < 0 && errno == EINTR); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
