Merge
This commit is contained in:
@@ -4,7 +4,7 @@ ifeq ($(OS),mingw)
|
|||||||
LIBS=-L../mingwlib -lssl -lcrypto -lws2_32 -lcrypt32 -lcryptui
|
LIBS=-L../mingwlib -lssl -lcrypto -lws2_32 -lcrypt32 -lcryptui
|
||||||
INCS=-I../mingwlib
|
INCS=-I../mingwlib
|
||||||
LUAFLAGS=-DLUA_COMPAT_ALL
|
LUAFLAGS=-DLUA_COMPAT_ALL
|
||||||
OPT=-g -O1
|
OPT=-g -O0
|
||||||
DRIVER=driver-mingw
|
DRIVER=driver-mingw
|
||||||
else ifeq ($(OS),linux)
|
else ifeq ($(OS),linux)
|
||||||
EXE=main
|
EXE=main
|
||||||
|
|||||||
@@ -28,20 +28,14 @@
|
|||||||
#include <openssl/bio.h>
|
#include <openssl/bio.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
#define CHBUF_SIZE (256*1024)
|
|
||||||
#define POLLVEC_SIZE (DrivenEngine::MAX_CHAN+1)
|
|
||||||
|
|
||||||
static std::unique_ptr<char[]> chbuf;
|
|
||||||
static std::unique_ptr<struct pollfd[]> pollvec;
|
|
||||||
|
|
||||||
static void set_nonblocking(SOCKET sock) {
|
static void set_nonblocking(SOCKET sock) {
|
||||||
u_long mode = 1; // 1 to enable non-blocking socket
|
u_long mode = 1; // 1 to enable non-blocking socket
|
||||||
int status = ioctlsocket(sock, FIONBIO, &mode);
|
int status = ioctlsocket(sock, FIONBIO, &mode);
|
||||||
assert(status == 0);
|
assert(status == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string winsock_error_string(int errcode) {
|
static std::string strerror_str(int errcode) {
|
||||||
drv::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << "error " << errcode;
|
oss << "error " << errcode;
|
||||||
return oss.str();
|
return oss.str();
|
||||||
}
|
}
|
||||||
@@ -51,7 +45,7 @@ static PADDRINFOA find_good_addr(PADDRINFOA addrinfo) {
|
|||||||
if (addr->ai_family == AF_INET) {
|
if (addr->ai_family == AF_INET) {
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
}std::string
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,9 +184,13 @@ static int socket_close(SOCKET socket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int socket_poll(struct pollfd *pollvec, int pollcount, int mstimeout, std::string &err) {
|
static int socket_poll(struct pollfd *pollvec, int pollcount, int mstimeout, std::string &err) {
|
||||||
|
if (pollcount == 0) {
|
||||||
|
if (mstimeout > 0) Sleep(mstimeout);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
int status = WSAPoll(pollvec, pollcount, mstimeout);
|
int status = WSAPoll(pollvec, pollcount, mstimeout);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
err = winsock_error_string(WSAGetLastError());
|
err = strerror_str(WSAGetLastError());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
@@ -241,7 +239,47 @@ static int console_read(char *bytes, int nbytes) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void driver_sysinit(int argc, char *argv[]) {
|
static void load_root_certs(SSL_CTX *ctx) {
|
||||||
|
HCERTSTORE hStore = CertOpenSystemStoreW(0, L"ROOT");
|
||||||
|
PCCERT_CONTEXT pContext = NULL;
|
||||||
|
X509 *x509;
|
||||||
|
X509_STORE *store = SSL_CTX_get_cert_store(ctx);
|
||||||
|
|
||||||
|
if (!hStore) {
|
||||||
|
fprintf(stderr, "Cannot open system certificate store.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((pContext = CertEnumCertificatesInStore(hStore, pContext))) {
|
||||||
|
const unsigned char *encoded_cert = pContext->pbCertEncoded;
|
||||||
|
x509 = d2i_X509(NULL, &encoded_cert, pContext->cbCertEncoded);
|
||||||
|
if (x509) {
|
||||||
|
X509_STORE_add_cert(store, x509);
|
||||||
|
X509_free(x509);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CertCloseStore(hStore, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ssl_ctx_use_dummycert(SSL_CTX *ctx);
|
||||||
|
|
||||||
|
static SSL_CTX *new_ssl_server_context() {
|
||||||
|
SSL_CTX *ctx = SSL_CTX_new(TLS_method());
|
||||||
|
SSL_CTX_set_mode(ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
|
||||||
|
SSL_CTX_set_mode(ctx, SSL_MODE_ENABLE_PARTIAL_WRITE);
|
||||||
|
SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, nullptr);
|
||||||
|
ssl_ctx_use_dummycert(ctx);
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
static SSL_CTX *new_ssl_client_context(int verify) {
|
||||||
|
SSL_CTX *ctx = SSL_CTX_new(TLS_method());
|
||||||
|
SSL_CTX_set_mode(ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
|
||||||
|
SSL_CTX_set_mode(ctx, SSL_MODE_ENABLE_PARTIAL_WRITE);
|
||||||
|
if (verify == SSL_VERIFY_PEER) load_root_certs(ctx);
|
||||||
|
SSL_CTX_set_verify(ctx, verify, nullptr);
|
||||||
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
class MonoClock {
|
class MonoClock {
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ void* realloc(void*, size_t);
|
|||||||
int memhash();
|
int memhash();
|
||||||
#else
|
#else
|
||||||
inline void *malloc(size_t x) { return ::malloc(x); }
|
inline void *malloc(size_t x) { return ::malloc(x); }
|
||||||
inline void free(void *p) { return ::free(x); }
|
inline void free(void *p) { return ::free(p); }
|
||||||
inline void *realloc(void *p, size_t x) { return ::realloc(p, x); }
|
inline void *realloc(void *p, size_t x) { return ::realloc(p, x); }
|
||||||
inline int memhash() { return 0; }
|
inline int memhash() { return 0; }
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ class DriverWebServerTest : public DrivenEngine {
|
|||||||
public:
|
public:
|
||||||
eng::vector<SharedChannel> channels_;
|
eng::vector<SharedChannel> channels_;
|
||||||
virtual void event_init(int argc, char *argv[]) {
|
virtual void event_init(int argc, char *argv[]) {
|
||||||
SharedChannel ch = new_outgoing_channel("stanford.edu:80");
|
SharedChannel ch = new_outgoing_channel("cert:stanford.edu:443");
|
||||||
ch->out()->write_bytes("GET http://stanford.edu/index.html HTTP/1.1\n\n");
|
ch->out()->write_bytes("GET https://stanford.edu/xbanankjdsh.html HTTP/1.1\n\n");
|
||||||
channels_.emplace_back(std::move(ch));
|
channels_.emplace_back(std::move(ch));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ public:
|
|||||||
set_initial_state();
|
set_initial_state();
|
||||||
|
|
||||||
// Establish a connection to the server.
|
// Establish a connection to the server.
|
||||||
channel_ = new_outgoing_channel("cert:localhost:8085");
|
channel_ = new_outgoing_channel("nocert:localhost:8085");
|
||||||
|
|
||||||
// Set the console prompt
|
// Set the console prompt
|
||||||
get_stdio_channel()->set_prompt(console_.get_prompt());
|
get_stdio_channel()->set_prompt(console_.get_prompt());
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
#include <cinttypes>
|
||||||
|
|
||||||
struct PrintBufferCore : public eng::opnew {
|
struct PrintBufferCore : public eng::opnew {
|
||||||
// The most recent lines printed.
|
// The most recent lines printed.
|
||||||
@@ -190,7 +191,7 @@ bool PrintChanneler::channel(const PrintBuffer *printbuffer, std::ostream &ostre
|
|||||||
|
|
||||||
Invocation PrintChanneler::invocation(int64_t actor_id) {
|
Invocation PrintChanneler::invocation(int64_t actor_id) {
|
||||||
char buf[80];
|
char buf[80];
|
||||||
sprintf(buf, "%ld", line_);
|
sprintf(buf, PRId64, line_);
|
||||||
return Invocation(Invocation::KIND_FLUSH_PRINTS, actor_id, actor_id, buf, InvocationData());
|
return Invocation(Invocation::KIND_FLUSH_PRINTS, actor_id, actor_id, buf, InvocationData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
|
|
||||||
|
#define _USE_MATH_DEFINES
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
#include "wrap-string.hpp"
|
#include "wrap-string.hpp"
|
||||||
#include "wrap-vector.hpp"
|
#include "wrap-vector.hpp"
|
||||||
#include "wrap-map.hpp"
|
#include "wrap-map.hpp"
|
||||||
@@ -15,7 +18,6 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
LuaDefine(makeclass, "classname", "create a class if it doesn't already exist") {
|
LuaDefine(makeclass, "classname", "create a class if it doesn't already exist") {
|
||||||
LuaArg classname;
|
LuaArg classname;
|
||||||
@@ -478,7 +480,9 @@ void SourceDB::register_lua_builtins() {
|
|||||||
}
|
}
|
||||||
if (reg->get_func() == nullptr) {
|
if (reg->get_func() == nullptr) {
|
||||||
if (builtin == nullptr) {
|
if (builtin == nullptr) {
|
||||||
std::cerr << "No such builtin function: " << classname << " " << funcname << std::endl;
|
if ((!reg->get_sandbox()) || (reg->get_args() != nullptr)) {
|
||||||
|
std::cerr << "No such builtin function: " << classname << " " << funcname << std::endl;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
reg->set_func(builtin);
|
reg->set_func(builtin);
|
||||||
}
|
}
|
||||||
@@ -680,6 +684,7 @@ LuaDefineBuiltin(table_remove, "vector, pos", "remove an element from a vector")
|
|||||||
LuaDefineBuiltin(table_sort, "vector [,comparefn]", "sort a vector");
|
LuaDefineBuiltin(table_sort, "vector [,comparefn]", "sort a vector");
|
||||||
LuaDefineBuiltin(table_pack, "v1, v2, v3...", "turn a sequence of arguments into a vector");
|
LuaDefineBuiltin(table_pack, "v1, v2, v3...", "turn a sequence of arguments into a vector");
|
||||||
LuaDefineBuiltin(table_unpack, "vector", "turn a vector into a sequence of return values");
|
LuaDefineBuiltin(table_unpack, "vector", "turn a vector into a sequence of return values");
|
||||||
|
LuaSandboxBuiltin(table_maxn, "", "");
|
||||||
|
|
||||||
LuaDefineBuiltin(string_byte, "str [,index]", "get a single byte from a string");
|
LuaDefineBuiltin(string_byte, "str [,index]", "get a single byte from a string");
|
||||||
LuaDefineBuiltin(string_char, "byte, byte,...", "convert sequence of bytes to a string");
|
LuaDefineBuiltin(string_char, "byte, byte,...", "convert sequence of bytes to a string");
|
||||||
@@ -736,6 +741,7 @@ LuaDefineBuiltin(math_sinh, "x", "return the hyperbolic sine of x in radians");
|
|||||||
LuaDefineBuiltin(math_sqrt, "x", "return the square root of x");
|
LuaDefineBuiltin(math_sqrt, "x", "return the square root of x");
|
||||||
LuaDefineBuiltin(math_tan, "x", "return the tangent of x in radians");
|
LuaDefineBuiltin(math_tan, "x", "return the tangent of x in radians");
|
||||||
LuaDefineBuiltin(math_tanh, "x", "return the hyperbolic tangent of x in radians");
|
LuaDefineBuiltin(math_tanh, "x", "return the hyperbolic tangent of x in radians");
|
||||||
|
LuaSandboxBuiltin(math_log10, "", "");
|
||||||
|
|
||||||
LuaDefineBuiltin(assert, "flag [,message]", "assert that flag is true, if not, raise error");
|
LuaDefineBuiltin(assert, "flag [,message]", "assert that flag is true, if not, raise error");
|
||||||
LuaDefineBuiltin(error, "message", "raise an error");
|
LuaDefineBuiltin(error, "message", "raise an error");
|
||||||
@@ -762,6 +768,10 @@ LuaSandboxBuiltin(xpcall, "", "");
|
|||||||
LuaSandboxBuiltin(loadfile, "", "");
|
LuaSandboxBuiltin(loadfile, "", "");
|
||||||
LuaSandboxBuiltin(load, "", "");
|
LuaSandboxBuiltin(load, "", "");
|
||||||
LuaSandboxBuiltin(require, "", "");
|
LuaSandboxBuiltin(require, "", "");
|
||||||
|
LuaSandboxBuiltin(module, "", "");
|
||||||
|
LuaSandboxBuiltin(loadstring, "", "");
|
||||||
|
LuaSandboxBuiltin(unpack, "", "");
|
||||||
|
|
||||||
|
|
||||||
LuaSandboxBuiltin(debug_debug, "", "");
|
LuaSandboxBuiltin(debug_debug, "", "");
|
||||||
LuaSandboxBuiltin(debug_getuservalue, "", "");
|
LuaSandboxBuiltin(debug_getuservalue, "", "");
|
||||||
@@ -786,6 +796,7 @@ LuaSandboxBuiltin(eris_settings, "", "");
|
|||||||
|
|
||||||
LuaSandboxBuiltin(package_loadlib, "", "");
|
LuaSandboxBuiltin(package_loadlib, "", "");
|
||||||
LuaSandboxBuiltin(package_searchpath, "", "");
|
LuaSandboxBuiltin(package_searchpath, "", "");
|
||||||
|
LuaSandboxBuiltin(package_seeall, "", "");
|
||||||
|
|
||||||
LuaSandboxBuiltin(coroutine_create, "", "");
|
LuaSandboxBuiltin(coroutine_create, "", "");
|
||||||
LuaSandboxBuiltin(coroutine_resume, "", "");
|
LuaSandboxBuiltin(coroutine_resume, "", "");
|
||||||
|
|||||||
Reference in New Issue
Block a user