From 293c79e86cebb37e148c73e0fa8b1ecbc7d5ea56 Mon Sep 17 00:00:00 2001 From: flamingcow Date: Sun, 5 May 2019 00:14:08 -0700 Subject: [PATCH] Relocate everything into modules --- .gitmodules | 3 +++ Makefile | 35 ----------------------------------- example_clock.cc | 25 ------------------------- firesse | 1 + sse.cc | 26 -------------------------- sse.h | 16 ---------------- sse_stream.cc | 28 ---------------------------- sse_stream.h | 16 ---------------- 8 files changed, 4 insertions(+), 146 deletions(-) create mode 100644 .gitmodules delete mode 100644 Makefile delete mode 100644 example_clock.cc create mode 160000 firesse delete mode 100644 sse.cc delete mode 100644 sse.h delete mode 100644 sse_stream.cc delete mode 100644 sse_stream.h diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..71522b5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "firesse"] + path = firesse + url = git@github.com:firestuff/firesse.git diff --git a/Makefile b/Makefile deleted file mode 100644 index e4bbc6d..0000000 --- a/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -FCGI_CXX ?= clang++ -FCGI_CXXFLAGS ?= -O3 -std=gnu++2a -Wall -Werror -FCGI_LDLIBS ?= -lgflags -lglog -lpthread - -all: example_simple example_clock - -objects = sse.o sse_stream.o fastcgi.o fastcgi_conn.o fastcgi_request.o fastcgi_parse.o stream_buffer.o buffer.o - -example_simple: example_simple.o $(objects) - $(FCGI_CXX) $(FCGI_CXXFLAGS) -o $@ $+ $(FCGI_LDLIBS) - -example_clock: example_clock.o $(objects) - $(FCGI_CXX) $(FCGI_CXXFLAGS) -o $@ $+ $(FCGI_LDLIBS) - -%.o: %.cc *.h Makefile - $(FCGI_CXX) $(FCGI_CXXFLAGS) -c -o $@ $< - -clean: - rm --force example_simple example_clock fastcgi_conn_afl *.o - -afl: - $(MAKE) clean - FCGI_CXX=afl-g++ $(MAKE) afl_int - -afl_int: fastcgi_conn_afl - -fastcgi_conn_afl: fastcgi_conn_afl.o $(objects) - $(FCGI_CXX) $(FCGI_CXXFLAGS) -o $@ $+ $(FCGI_LDLIBS) - -test: test_fastcgi_conn - -test_fastcgi_conn: fastcgi_conn_afl - @echo "Running $$(ls afl_state/testcases | wc -l) tests" - for FILE in afl_state/testcases/*; do ./fastcgi_conn_afl < $$FILE; done - @printf '\033[0;32mALL TESTS PASSED\033[0m\n' diff --git a/example_clock.cc b/example_clock.cc deleted file mode 100644 index 4bfc00a..0000000 --- a/example_clock.cc +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include -#include - -#include "sse.h" - -DEFINE_int32(port, 9000, "TCP port to bind"); - -int main(int argc, char *argv[]) { - google::InitGoogleLogging(argv[0]); - gflags::ParseCommandLineFlags(&argc, &argv, true); - - SSEServer server(FLAGS_port, [](std::unique_ptr stream) { - while (true) { - timeval tv; - PCHECK(gettimeofday(&tv, nullptr) == 0); - uint64_t time_ms = tv.tv_sec * 1000 + tv.tv_usec / 1000; - if (!stream->WriteEvent(std::to_string(time_ms), 0, "time")) { - break; - } - sleep(1); - } - }); - server.Serve(); -} diff --git a/firesse b/firesse new file mode 160000 index 0000000..ee2667b --- /dev/null +++ b/firesse @@ -0,0 +1 @@ +Subproject commit ee2667bb1a9c792ae20347ec075afd216b750837 diff --git a/sse.cc b/sse.cc deleted file mode 100644 index 01ffc4e..0000000 --- a/sse.cc +++ /dev/null @@ -1,26 +0,0 @@ -#include "sse.h" - -SSEServer::SSEServer(int port, const std::function)>& callback) - : callback_(callback), - fastcgi_server_(port, - [this](std::unique_ptr request) { OnRequest(std::move(request)); }, - 1, - {"HTTP_ACCEPT"}) {} - -void SSEServer::Serve() { - fastcgi_server_.Serve(); -} - -void SSEServer::OnRequest(std::unique_ptr request) { - if (request->GetParam("HTTP_ACCEPT") != "text/event-stream") { - LOG(WARNING) << "bad HTTP_ACCEPT: " << request->GetParam("HTTP_ACCEPT"); - request->WriteHeader("Status", "400 Bad Request"); - request->WriteHeader("Content-Type", "text-plain"); - request->WriteBody("No \"Accept: text/event-stream\" header found in request. Please call this endpoint using EventSource."); - request->End(); - return; - } - request->WriteHeader("Content-Type", "text/event-stream"); - request->WriteBody(""); - callback_(std::make_unique(std::move(request))); -} diff --git a/sse.h b/sse.h deleted file mode 100644 index e3d51ff..0000000 --- a/sse.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "fastcgi.h" -#include "sse_stream.h" - -class SSEServer { - public: - SSEServer(int port, const std::function)>& callback); - void Serve(); - - private: - void OnRequest(std::unique_ptr request); - - std::function)> callback_; - FastCGIServer fastcgi_server_; -}; diff --git a/sse_stream.cc b/sse_stream.cc deleted file mode 100644 index a5a4500..0000000 --- a/sse_stream.cc +++ /dev/null @@ -1,28 +0,0 @@ -#include "sse_stream.h" - -#include "fastcgi_request.h" - -SSEStream::SSEStream(std::unique_ptr request) - : request_(std::move(request)) {} - -bool SSEStream::WriteEvent(const std::string& data, uint64_t id, const std::string& type) { - if (id) { - request_->WriteBody("id: "); - request_->WriteBody(std::to_string(id)); - request_->WriteBody("\n"); - } - if (!type.empty()) { - request_->WriteBody("event: "); - request_->WriteBody(type); - request_->WriteBody("\n"); - } - request_->WriteBody("data: "); - request_->WriteBody(data); - request_->WriteBody("\n\n"); - - return request_->Flush(); -} - -bool SSEStream::End() { - return request_->End(); -} diff --git a/sse_stream.h b/sse_stream.h deleted file mode 100644 index c8b5fb0..0000000 --- a/sse_stream.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include - -class FastCGIRequest; - -class SSEStream { - public: - SSEStream(std::unique_ptr request); - - [[nodiscard]] bool WriteEvent(const std::string& data, uint64_t id=0, const std::string& type=""); - bool End(); - - private: - std::unique_ptr request_; -};