Some clean-ups

This commit is contained in:
Alex Hultman
2018-09-15 05:31:42 +02:00
parent eee6e97fda
commit 883bdfe7d7
11 changed files with 41 additions and 53 deletions
+2 -2
View File
@@ -2,9 +2,9 @@ default:
rm *.o
clang -flto -O3 -c -IuSockets/src uSockets/src/*.c uSockets/src/eventing/*.c
clang++ -flto -O3 -c -std=c++17 -Isrc -IuSockets/src main.cpp
clang++ -flto -O3 -s *.o -o uWS_main -lssl -lcrypto
clang++ -flto -O3 -s *.o -o uWS_main -lssl -lcrypto -lpthread
tests:
rm *.o
clang -flto -O3 -c -IuSockets/src uSockets/src/*.c uSockets/src/eventing/*.c
clang++ -flto -O3 -c -std=c++17 -Isrc -IuSockets/src tests.cpp
clang++ -flto -O3 -s *.o -o uWS_tests -lssl -lcrypto
clang++ -flto -O3 -s *.o -o uWS_tests -lssl -lcrypto -lpthread
-29
View File
@@ -15,24 +15,6 @@ protected:
using SOCKET_TYPE = typename StaticDispatch<SSL>::SOCKET_TYPE;
using StaticDispatch<SSL>::static_dispatch;
// this will have to belong here for now
int u32toa(uint32_t value, char *dst) {
char temp[10];
char *p = temp;
do {
*p++ = (char) (value % 10) + '0';
value /= 10;
} while (value > 0);
int ret = p - temp;
do {
*dst++ = *--p;
} while (p != temp);
return ret;
}
LoopData *getLoopData() {
if constexpr(SSL) {
return (LoopData *) us_loop_ext(us_ssl_socket_context_loop(us_ssl_socket_get_context((SOCKET_TYPE *) this)));
@@ -138,17 +120,6 @@ public:
return length;
}
/* Write an unsigned 32-bit integer */
void writeUnsigned(unsigned int value) {
LoopData *loopData = getLoopData();
char buf[10];
int length = u32toa(value, buf);
// for now we do this copy
write(buf, length);
}
/* Uncork this socket and flush or buffer any corked and/or passed data. It is essential to remember doing this. */
/* It does NOT count bytes written from cork buffer (they are already accounted for in the write call responsible for its corking)! */
int uncork(const char *src = nullptr, int length = 0, bool optionally = false) {
+3 -6
View File
@@ -1,17 +1,14 @@
#ifndef ASYNCSOCKETDATA_H
#define ASYNCSOCKETDATA_H
#include <string>
/* Depending on how we want AsyncSocket to function, this will need to change */
// todo: think about chains of AsyncSocketData too!
// we want to buffer things up in one buffer, or in many separate ones (like with websockets)
#include <string>
template <bool SSL>
struct AsyncSocketData {
// we need a buffer
/* This will do for now */
std::string buffer;
};
#endif // ASYNCSOCKETDATA_H
-3
View File
@@ -11,18 +11,15 @@ struct HttpRequest;
template <bool SSL>
struct HttpContextData {
private:
public:
struct UserData {
HttpResponse<SSL> *httpResponse;
HttpRequest *httpRequest;
};
HttpRouter<UserData *> router;
};
}
+2
View File
@@ -1,6 +1,8 @@
#ifndef HTTPPARSER_H
#define HTTPPARSER_H
/* The HTTP parser is an independent module subject to unit testing / fuzz testing */
#include <string>
#include <functional>
#include <cstring>
+27 -1
View File
@@ -18,6 +18,32 @@ private:
return (HttpResponseData<SSL> *) AsyncSocket<SSL>::getExt();
}
int u32toa(uint32_t value, char *dst) {
char temp[10];
char *p = temp;
do {
*p++ = (char) (value % 10) + '0';
value /= 10;
} while (value > 0);
int ret = p - temp;
do {
*dst++ = *--p;
} while (p != temp);
return ret;
}
/* Write an unsigned 32-bit integer */
void writeUnsigned(unsigned int value) {
char buf[10];
int length = u32toa(value, buf);
/* For now we do this copy */
AsyncSocket<SSL>::write(buf, length);
}
public:
/* Write the HTTP status */
HttpResponse *writeStatus(std::string_view status) {
@@ -40,7 +66,7 @@ public:
void write(std::function<std::string_view(int)> cb, int length) {
std::string_view chunk = cb(0);
AsyncSocket<SSL>::write("Content-Length: ", 16);
AsyncSocket<SSL>::writeUnsigned(chunk.length());
writeUnsigned(chunk.length());
AsyncSocket<SSL>::write("\r\n\r\n", 4);
if (int written; (written = AsyncSocket<SSL>::write(chunk.data(), chunk.length(), true)) < length) {
std::cout << "HttpResponse::write failed to write everything" << std::endl;
+1 -7
View File
@@ -11,16 +11,10 @@ namespace uWS {
template <bool SSL>
struct HttpResponseData : HttpParser, AsyncSocketData<SSL> {
// asyncsocketdata will hold the outgoing buffer to hold the header if not sent off in one go
// inStream, outStream
std::function<void(std::string_view)> inStream;
std::function<std::string_view(int)> outStream;
/* Outgoing offset */
int offset = 0;
// writeHandler
};
}
+2 -1
View File
@@ -1,7 +1,8 @@
#ifndef HTTPROUTER_HPP
#define HTTPROUTER_HPP
// this header also needs testing and fixing as a separate module
/* HTTP router is an independent module subject to unit testing and fuzz testing */
/* TODO: this module needs much work and fixes */
#include <map>
#include <functional>
+2
View File
@@ -1,6 +1,8 @@
#ifndef LOOP_H
#define LOOP_H
/* The loop is lazily created per-thread and run with uWS::run() */
#include "LoopData.h"
#include <libusockets.h>
+1 -3
View File
@@ -2,18 +2,16 @@
#define LOOPDATA_H
struct LoopData {
private:
public:
/* Good 16k for SSL perf. */
static const int CORK_BUFFER_SIZE = 16 * 1024;
/* Cork data */
char *corkBuffer = new char[CORK_BUFFER_SIZE];
int corkOffset = 0;
bool corked = false;
};
#endif // LOOPDATA_H
+1 -1
View File
@@ -1,7 +1,7 @@
#ifndef STATICDISPATCH_H
#define STATICDISPATCH_H
// this headers is basically a statically dispatched libusockets wrapper base
/* This headers is basically a statically dispatched libusockets wrapper base */
#include <type_traits>
#include <libusockets.h>