moonbridge
changeset 139:f148bd2b3d05
Added moonbridge_io.h to Makefile; Added stub for moonbridge_websocket.c (with base64'd SHA-1)
author | jbe |
---|---|
date | Sat Apr 18 01:33:38 2015 +0200 (2015-04-18) |
parents | 2097b1835d96 |
children | 9ca22af4d4b1 |
files | Makefile moonbridge_websocket.c |
line diff
1.1 --- a/Makefile Fri Apr 17 19:20:23 2015 +0200 1.2 +++ b/Makefile Sat Apr 18 01:33:38 2015 +0200 1.3 @@ -50,17 +50,23 @@ 1.4 MOONBR_LUA_CPATH_DEFINE = "-DMOONBR_LUA_CPATH=\"$(MOONBR_LUA_CPATH)\"" 1.5 .endif 1.6 1.7 -all:: moonbridge moonbridge_io.so 1.8 +all:: moonbridge moonbridge_io.so moonbridge_websocket.so 1.9 1.10 moonbridge: moonbridge.c moonbridge_io.h moonbridge_io.o 1.11 cc -Wall -Wno-unused-result -O2 -Wl,-E -I $(LUA_INCLUDE) -L $(LUA_LIBDIR) -o moonbridge $(MOONBR_LUA_PATH_DEFINE) $(MOONBR_LUA_CPATH_DEFINE) moonbridge.c -lm -l$(LUA_LIBRARY) $(UTIL_FLAGS) moonbridge_io.o 1.12 1.13 -moonbridge_io.o: moonbridge_io.c 1.14 +moonbridge_io.o: moonbridge_io.c moonbridge_io.h 1.15 cc -c -Wall -O2 -fPIC -I $(LUA_INCLUDE) -o moonbridge_io.o moonbridge_io.c 1.16 1.17 moonbridge_io.so: moonbridge_io.o 1.18 ld -shared -o moonbridge_io.so moonbridge_io.o 1.19 1.20 +moonbridge_websocket.o: moonbridge_websocket.c 1.21 + cc -c -Wall -O2 -fPIC -I $(LUA_INCLUDE) -o moonbridge_websocket.o moonbridge_websocket.c 1.22 + 1.23 +moonbridge_websocket.so: moonbridge_websocket.o 1.24 + ld -shared -o moonbridge_websocket.so -lmd moonbridge_websocket.o 1.25 + 1.26 clean:: 1.27 - rm -f moonbridge moonbridge_io.o moonbridge_io.so 1.28 + rm -f moonbridge moonbridge_io.o moonbridge_websocket.so 1.29
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/moonbridge_websocket.c Sat Apr 18 01:33:38 2015 +0200 2.3 @@ -0,0 +1,49 @@ 2.4 + 2.5 +#include <lua.h> 2.6 +#include <lauxlib.h> 2.7 +#include <lualib.h> 2.8 + 2.9 +#include <sys/types.h> 2.10 +#include <sha.h> 2.11 + 2.12 +static int moonbr_ws_hsresp(lua_State *L) { 2.13 + const char *challenge; 2.14 + size_t challenge_len; 2.15 + SHA_CTX context; 2.16 + char digest[20]; 2.17 + static const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 2.18 + char digest64[28]; 2.19 + int i, j; 2.20 + int s = 0, b = 0; 2.21 + challenge = luaL_checklstring(L, 1, &challenge_len); 2.22 + SHA1_Init(&context); 2.23 + SHA1_Update(&context, challenge, challenge_len); 2.24 + SHA1_Update(&context, "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", 36); 2.25 + SHA1_Final((unsigned char *)digest, &context); 2.26 + for (i=0, j=0; i<20; i++) { 2.27 + b = (b << 8) + (unsigned char)digest[i]; 2.28 + s += 8; 2.29 + while (s >= 6) { 2.30 + s -= 6; 2.31 + digest64[j++] = alphabet[b >> s]; 2.32 + b &= (1<<s)-1; 2.33 + } 2.34 + } 2.35 + digest64[26] = alphabet[b << 2]; 2.36 + digest64[27] = '='; 2.37 + lua_pushlstring(L, digest64, 28); 2.38 + return 1; 2.39 +} 2.40 + 2.41 +static const struct luaL_Reg moonbr_ws_module_funcs[] = { 2.42 + {"hsresp", moonbr_ws_hsresp}, 2.43 + {NULL, NULL} 2.44 +}; 2.45 + 2.46 +int luaopen_moonbridge_websocket(lua_State *L) { 2.47 + lua_newtable(L); // module 2.48 + luaL_setfuncs(L, moonbr_ws_module_funcs, 0); 2.49 + return 1; 2.50 + 2.51 +} 2.52 +