one lib is enough

pull/39/head
Ciro 2022-11-01 09:30:46 -03:00
rodzic 45a29a276b
commit 5a778bd245
7 zmienionych plików z 51 dodań i 35 usunięć

Wyświetl plik

@ -10,14 +10,13 @@ shared:
$(MAKE) clean
# build uWebSockets
cd ../uWebSockets/uSockets && $(CC) -pthread -DLIBUS_USE_OPENSSL -DLIBUS_USE_LIBUV -std=c11 -Isrc -flto -fPIC -O3 -c src/*.c src/eventing/*.c src/crypto/*.c
cd ../uWebSockets/uSockets && $(CXX) -std=c++17 -flto -fPIC -O3 -c src/crypto/*.cpp
cd ../uWebSockets/uSockets && $(AR) rvs uSockets.a *.o
$(CXX) -c -O3 -std=c++17 -lz -luv -flto -fPIC -I ../uWebSockets/src -I ../uWebSockets/uSockets/src ../uWebSockets/capi/$(UWS_LIBRARY_NAME).cpp
$(CXX) -shared -o $(UWS_LIBRARY_NAME).so $(UWS_LIBRARY_NAME).o ../uWebSockets/uSockets/uSockets.a -fPIC -lz -luv -lssl -lcrypto
$(CC) -c -O3 -luv -flto -fPIC -I ./src ./src/$(LIBRARY_NAME).c
$(CC) -shared -o $(LIBRARY_NAME).so $(LIBRARY_NAME).o -luv
# build CAPI + libsocketify
$(CXX) -c -O1 -std=c++17 -lz -luv -flto -fPIC -I ./src -I ../uWebSockets/src -I ../uWebSockets/uSockets/src -I ../uWebSockets/capi ./src/$(LIBRARY_NAME).cpp
$(CXX) -shared -o ../$(LIBRARY_NAME).so $(LIBRARY_NAME).o ../uWebSockets/uSockets/uSockets.a -fPIC -lz -luv -lssl -lcrypto
rm -f *.o

Wyświetl plik

@ -1,10 +1,12 @@
#include "uv.h"
#include "libsocketify.h"
#include <stdlib.h>
#include <stdio.h>
#include "libuwebsockets.h"
#include "libuwebsockets.cpp" //include symbols
extern "C"
{
void socketify_generic_prepare_callback(uv_prepare_t *prepare){
socketify_loop* loop = (socketify_loop*)uv_handle_get_data((uv_handle_t*)prepare);
loop->on_prepare_handler(loop->on_prepare_data);
@ -26,12 +28,12 @@ void* socketify_get_native_loop(socketify_loop* loop){
}
socketify_loop * socketify_create_loop(){
socketify_loop* loop = malloc(sizeof(uv_prepare_t));
socketify_loop* loop = (socketify_loop*)malloc(sizeof(uv_prepare_t));
loop->uv_loop = NULL;
loop->on_prepare_handler = NULL;
loop->uv_prepare_ptr = NULL;
uv_loop_t* uv_loop = malloc(sizeof(uv_loop_t));
uv_loop_t* uv_loop = (uv_loop_t*)malloc(sizeof(uv_loop_t));
if(uv_loop_init(uv_loop)){
free(uv_loop);
return loop;
@ -47,8 +49,8 @@ bool socketify_constructor_failed(socketify_loop* loop){
bool socketify_on_prepare(socketify_loop* loop, socketify_prepare_handler handler, void* user_data){
if (loop->uv_prepare_ptr != NULL) return false;
if(handler == NULL) return false;
uv_prepare_t* prepare = malloc(sizeof(uv_prepare_t));
if(uv_prepare_init(loop->uv_loop, prepare)){
uv_prepare_t* prepare = (uv_prepare_t*)malloc(sizeof(uv_prepare_t));
if(uv_prepare_init((uv_loop_t*)loop->uv_loop, prepare)){
free(prepare);
return false;
}
@ -66,7 +68,7 @@ bool socketify_on_prepare(socketify_loop* loop, socketify_prepare_handler handle
bool socketify_prepare_unbind(socketify_loop* loop){
if(loop->uv_prepare_ptr == NULL) return false;
uv_prepare_stop(loop->uv_prepare_ptr);
uv_prepare_stop((uv_prepare_t *)loop->uv_prepare_ptr);
free(loop->uv_prepare_ptr);
loop->uv_prepare_ptr = NULL;
@ -74,19 +76,19 @@ bool socketify_prepare_unbind(socketify_loop* loop){
}
int socketify_loop_run(socketify_loop* loop, socketify_run_mode mode){
return uv_run(loop->uv_loop, (uv_run_mode)mode);
return uv_run((uv_loop_t*)loop->uv_loop, (uv_run_mode)mode);
}
void socketify_loop_stop(socketify_loop* loop){
if(uv_loop_alive(loop->uv_loop)){
uv_stop(loop->uv_loop);
if(uv_loop_alive((uv_loop_t*)loop->uv_loop)){
uv_stop((uv_loop_t*)loop->uv_loop);
}
}
void socketify_destroy_loop(socketify_loop* loop){
socketify_loop_stop(loop);
uv_loop_close(loop->uv_loop);
uv_loop_close((uv_loop_t*)loop->uv_loop);
free(loop->uv_loop);
if(loop->uv_prepare_ptr){
free(loop->uv_prepare_ptr);
@ -96,14 +98,14 @@ void socketify_destroy_loop(socketify_loop* loop){
socketify_timer* socketify_create_timer(socketify_loop* loop, uint64_t timeout, uint64_t repeat, socketify_timer_handler handler, void* user_data){
uv_timer_t* uv_timer = malloc(sizeof(uv_timer_t));
// uv_timer_init(loop->uv_loop, uv_timer);
if(uv_timer_init(loop->uv_loop, uv_timer)){
uv_timer_t* uv_timer = (uv_timer_t* ) malloc(sizeof(uv_timer_t));
if(uv_timer_init((uv_loop_t*)loop->uv_loop, uv_timer)){
free(uv_timer);
return NULL;
}
socketify_timer* timer = malloc(sizeof(socketify_timer));
socketify_timer* timer = (socketify_timer*)malloc(sizeof(socketify_timer));
timer->uv_timer_ptr = uv_timer;
timer->user_data = user_data;
timer->handler = handler;
@ -115,13 +117,13 @@ socketify_timer* socketify_create_timer(socketify_loop* loop, uint64_t timeout,
}
void socketify_timer_set_repeat(socketify_timer* timer, uint64_t repeat){
uv_timer_set_repeat( timer->uv_timer_ptr, repeat);
uv_timer_set_repeat((uv_timer_t *) timer->uv_timer_ptr, repeat);
}
//stops and destroy timer info
void socketify_timer_destroy(socketify_timer* timer){
uv_timer_stop(timer->uv_timer_ptr);
uv_timer_stop((uv_timer_t *)timer->uv_timer_ptr);
free(timer->uv_timer_ptr);
free(timer);
}
@ -130,13 +132,13 @@ void socketify_timer_destroy(socketify_timer* timer){
socketify_timer* socketify_create_check(socketify_loop* loop, socketify_timer_handler handler, void* user_data){
uv_check_t* uv_timer = malloc(sizeof(uv_check_t));
if(uv_check_init(loop->uv_loop, uv_timer)){
uv_check_t* uv_timer = (uv_check_t*)malloc(sizeof(uv_check_t));
if(uv_check_init((uv_loop_t*)loop->uv_loop, uv_timer)){
free(uv_timer);
return NULL;
}
socketify_timer* timer = malloc(sizeof(socketify_timer));
socketify_timer* timer = (socketify_timer*)malloc(sizeof(socketify_timer));
timer->uv_timer_ptr = uv_timer;
timer->user_data = user_data;
timer->handler = handler;
@ -149,7 +151,8 @@ socketify_timer* socketify_create_check(socketify_loop* loop, socketify_timer_ha
//stops and destroy timer info
void socketify_check_destroy(socketify_timer* timer){
uv_check_stop(timer->uv_timer_ptr);
uv_check_stop((uv_check_t *)timer->uv_timer_ptr);
free(timer->uv_timer_ptr);
free(timer);
}
}

Wyświetl plik

@ -4,6 +4,11 @@
#include <stdbool.h>
#ifdef __cplusplus
extern "C"
{
#endif
#include "libuwebsockets.h"
typedef void (*socketify_prepare_handler)(void* user_data);
typedef void (*socketify_timer_handler)(void* user_data);
@ -44,4 +49,7 @@ void socketify_timer_set_repeat(socketify_timer* timer, uint64_t repeat);
socketify_timer* socketify_create_check(socketify_loop* loop, socketify_timer_handler handler, void* user_data);
void socketify_check_destroy(socketify_timer* timer);
#endif
#ifdef __cplusplus
}
#endif

Wyświetl plik

@ -54,7 +54,7 @@ void socketify_timer_set_repeat(socketify_timer* timer, uint64_t repeat);
socketify_timer* socketify_create_check(socketify_loop* loop, socketify_timer_handler handler, void* user_data);
void socketify_check_destroy(socketify_timer* timer);
""")
library_path = os.path.join(os.path.dirname(__file__), "libsocketify.so")
library_path = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "libsocketify.so"))
lib = ffi.dlopen(library_path)

Wyświetl plik

@ -217,6 +217,8 @@ bool uws_req_get_yield(uws_req_t *res);
void uws_req_set_field(uws_req_t *res, bool yield);
size_t uws_req_get_url(uws_req_t *res, const char **dest);
size_t uws_req_get_method(uws_req_t *res, const char **dest);
size_t uws_req_get_case_sensitive_method(uws_req_t *res, const char **dest);
size_t uws_req_get_header(uws_req_t *res, const char *lower_case_header, size_t lower_case_header_length, const char **dest);
size_t uws_req_get_query(uws_req_t *res, const char *key, size_t key_length, const char **dest);
size_t uws_req_get_parameter(uws_req_t *res, unsigned short index, const char **dest);
@ -225,7 +227,7 @@ void uws_req_for_each_header(uws_req_t *res, uws_get_headers_server_handler hand
""")
library_path = os.path.join(os.path.dirname(__file__), "native", "libuwebsockets.so")
library_path = os.path.join(os.path.dirname(__file__), "libsocketify.so")
lib = ffi.dlopen(library_path)
@ffi.callback("void(const char *, size_t, const char *, size_t, void *)")
@ -372,9 +374,12 @@ class AppRequest:
return ffi.unpack(buffer_address, length).decode("utf-8")
except Exception: #invalid utf-8
return None
def get_method(self):
buffer = ffi.new("char**")
length = lib.uws_req_get_method(self.req, buffer)
#will use uws_req_get_case_sensitive_method until version v21 and switch back to uws_req_get_method for 0 impacts on behavior
length = lib.uws_req_get_case_sensitive_method(self.req, buffer)
buffer_address = ffi.addressof(buffer, 0)[0]
if buffer_address == ffi.NULL:
return None
@ -383,6 +388,7 @@ class AppRequest:
return ffi.unpack(buffer_address, length).decode("utf-8")
except Exception: #invalid utf-8
return None
def for_each_header(self, handler):
self._for_each_header_handler = handler
lib.uws_req_for_each_header(self.req, uws_req_for_each_header_handler, self._ptr)

@ -1 +1 @@
Subproject commit d38dbd88348d42292f5c2c4ab7daf9b5aa1bb657
Subproject commit b5f0a8a07a89ea13b08785d7a65c33036bc53cda

Wyświetl plik

@ -68,7 +68,9 @@
# void uws_filter(int ssl, uws_app_t *app, uws_filter_handler handler, void *user_data);
# https://github.com/uNetworking/uWebSockets.js/blob/master/examples/VideoStreamer.js
from socketify import App
# from socketify import App
from socketify import App, AppOptions
# import os
import multiprocessing
import asyncio
@ -80,11 +82,8 @@ mimetypes.init()
async def home(res, req):
print("full", req.get_full_url())
print("normal", req.get_url())
print("method", req.get_method())
req.for_each_header(lambda key,value: print("Header %s: %s" % (key, value)))
print("All headers", req.get_headers())
res.end("Test")
def run_app():
@ -99,6 +98,7 @@ def create_fork():
if not n > 0:
run_app()
#openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -passout pass:1234 -keyout ./misc/key.pem -out ./misc/cert.pem
# # fork limiting the cpu count - 1
# for i in range(1, multiprocessing.cpu_count()):
# create_fork()