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 +

Impressum / About Us