kopia lustrzana https://github.com/cirospaciari/socketify.py
one lib is enough
rodzic
45a29a276b
commit
5a778bd245
|
@ -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
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
10
src/tests.py
10
src/tests.py
|
@ -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()
|
||||
|
|
Ładowanie…
Reference in New Issue