diff --git a/src/luasubmodules/init.lua b/src/luasubmodules/init.lua index 9710adf..8db8ad0 100644 --- a/src/luasubmodules/init.lua +++ b/src/luasubmodules/init.lua @@ -324,11 +324,9 @@ local function checkEd25519rsa () ed25519rsa.freeaKey(rsa_) end checkEd25519rsa () - - ---GMPTEST() ---CryptocoinsTest() ---checkGD(120,120,100) ---EncDecTest() +GMPTEST() +CryptocoinsTest() +checkGD(120,120,100) +EncDecTest() diff --git a/src/main.c b/src/main.c index 430ad13..49aaf2a 100644 --- a/src/main.c +++ b/src/main.c @@ -5,7 +5,7 @@ #include #include -//extern int start_lua(void); +// extern int start_lua(void); // void __start(void){} # extern void example(void); @@ -13,92 +13,128 @@ extern void example(void); #define LUAMAXLISTEN 3 typedef struct { - char * host; unsigned int port; - lua_State * L; + char *host; + unsigned int port; + lua_State *L; } servArgs; -static void checkRetVal(lua_State * L, int n){ - lua_getglobal(L, "checkRetVal"); - lua_pushnumber(L, n); - if (lua_pcall(L, /*args*/1, /*results*/1, 0) != 0) - luaL_error(L, "error running function `checkRetVal': %s", - lua_tostring(L, -1)); - if (!lua_isnumber(L, -1)){ - printf("(check retval[lua]) Ret val: %s\n", lua_tostring(L,-1) ); - }else printf("(check retval[lua]) Ret val (num): %d\n", (int)lua_tonumber(L,-1) ); - lua_pop(L,1); +static void checkRetVal(lua_State *L, int n) { + lua_getglobal(L, "checkRetVal"); + lua_pushnumber(L, n); + if (lua_pcall(L, /*args*/ 1, /*results*/ 1, 0) != 0) + luaL_error(L, "error running function `checkRetVal': %s", + lua_tostring(L, -1)); + if (!lua_isnumber(L, -1)) { + printf("(check retval[lua]) Ret val: %s\n", lua_tostring(L, -1)); + } else + printf("(check retval[lua]) Ret val (num): %d\n", (int)lua_tonumber(L, -1)); + lua_pop(L, 1); } -static int luaServInit(servArgs * args){ - if( strcmp(args->host, "127.0.0.1") != 0) fprintf(stderr,"WARNING: lua listening not in localhost!\n"); - int sock=socket(AF_INET, SOCK_STREAM, LUASOCK); - if(sock == -1){ - fprintf(stderr,"can't init socket for luaServer\n"); - return 0; - } - - struct sockaddr_in luaServAddr; - luaServAddr.sin_family = AF_INET; - luaServAddr.sin_port = htons(args->port); - luaServAddr.sin_addr.s_addr = inet_addr(args->host); - int ret = bind(sock, (struct sockaddr *)&luaServAddr, - sizeof(struct sockaddr_in)); - if (ret == -1) { - close(sock); - fprintf(stderr,"can't bind %s:%d\n", args->host, args->port); - return 0; - } - if (listen(sock, LUAMAXLISTEN) == -1){ - close(sock); - fprintf(stderr,"cant listen %d users for lua server\n"); - return 0; - } - return sock; +static int luaServInit(servArgs *args) { + if (strcmp(args->host, "127.0.0.1") != 0) + fprintf(stderr, "WARNING: lua listening not in localhost!\n"); + int sock = socket(AF_INET, SOCK_STREAM, LUASOCK); + if (sock == -1) { + fprintf(stderr, "can't init socket for luaServer\n"); + return 0; + } + + struct sockaddr_in luaServAddr; + luaServAddr.sin_family = AF_INET; + luaServAddr.sin_port = htons(args->port); + luaServAddr.sin_addr.s_addr = inet_addr(args->host); + int ret = + bind(sock, (struct sockaddr *)&luaServAddr, sizeof(struct sockaddr_in)); + if (ret == -1) { + close(sock); + fprintf(stderr, "can't bind %s:%d\n", args->host, args->port); + return 0; + } + if (listen(sock, LUAMAXLISTEN) == -1) { + close(sock); + fprintf(stderr, "cant listen %d users for lua server\n"); + return 0; + } + return sock; } #define MAXERRACCEPT 5 #define LUABUF 2056 -void luaServer(servArgs * args){ +void luaServer(servArgs *args) { + int serv_sock = luaServInit(args); - int serv_sock = luaServInit(args); - - if(serv_sock == 0) - return; - int error;//lua error - int csocket; - size_t err_count, msg_size; - struct sockaddr_in clientAddr; - socklen_t addr_len = sizeof(struct sockaddr_in); - printf("(lua server) listening on %s:%d\n", args->host, args->port); - while( (csocket = accept(serv_sock,(struct sockaddr*)&clientAddr,&addr_len)) ){ - //freopen("stdout.txt", "w", stdout); //for lua_server - if(csocket == -1){ - fprintf(stderr,"cant accept\n"); - err_count++; - }else if(err_count)err_count--; - if(err_count > MAXERRACCEPT) break; - const char *ip = inet_ntoa(clientAddr.sin_addr); - const uint16_t port = htons(clientAddr.sin_port); - printf("(lua_server) Connected %s:%d\n", ip, port); - char buf[LUABUF]; - bzero(buf, LUABUF); - while( (msg_size = recv(csocket, buf, LUABUF-1, 0)) > 0 ){ //maybe can be -1(?) - error = - luaL_loadbuffer(args->L, buf, strlen(buf), "line") || lua_pcall(args->L, 0, 0, 0); - if (error) { - fprintf(stderr, "%s", lua_tostring(args->L, -1)); - lua_pop(args->L, 1); /* pop error message from the stack */ - } - bzero(buf, LUABUF); - } - printf("(lua_server) lost connection %s:%d\n", ip, port); // to macros - close(csocket); - } + if (serv_sock == 0) + return; + int error; // lua error + int csocket; + size_t err_count, msg_size; + struct sockaddr_in clientAddr; + socklen_t addr_len = sizeof(struct sockaddr_in); + printf("(lua server) listening on %s:%d\n", args->host, args->port); + // puts("dupping stdout"); + // int stdout_oldflags = fcntl(stdout_, F_GETFL, 0); + // fcntl(stdout_, F_SETFL, stdout_oldflags | O_NONBLOCK); + + while ((csocket = + accept(serv_sock, (struct sockaddr *)&clientAddr, &addr_len))) { + int stdout_ = dup(STDOUT_FILENO); + + if (csocket == -1) { + fprintf(stderr, "cant accept\n"); + err_count++; + } else if (err_count) + err_count--; + if (err_count > MAXERRACCEPT) + break; + const char *ip = inet_ntoa(clientAddr.sin_addr); + const uint16_t port = htons(clientAddr.sin_port); + printf("(lua_server) Connected %s:%d\n", ip, port); + char buf[LUABUF]; + bzero(buf, LUABUF); + FILE *tmp, *tmp1; +#define LUATMPFILESTDOUT "./tmp_bacteria_lua.txt" + + while ((msg_size = recv(csocket, buf, LUABUF - 1, 0)) > + 0) { // maybe can be -1(?) + tmp = freopen(LUATMPFILESTDOUT, "w", stdout); // for lua_server + tmp1 = fopen(LUATMPFILESTDOUT, "rb"); + error = luaL_loadbuffer(args->L, buf, strlen(buf), "line") || + lua_pcall(args->L, 0, 0, 0); + if (error) { + sprintf(buf, "%s", lua_tostring(args->L, -1)); + lua_pop(args->L, 1); /* pop error message from the stack */ + send(csocket, buf, strlen(buf), 0); + fclose(tmp); + fclose(tmp1); + } else { + // puts("Read stdout"); + fflush(lstdout); + // + fclose(tmp); + bzero(buf, LUABUF); + (msg_size = fread(buf, LUABUF, 1, tmp1)); + send(csocket, buf, strlen(buf), 0); + // send(csocket, buf, strlen(buf), 0); + fclose(tmp1); + } + bzero(buf, LUABUF); + tmp = fopen(LUATMPFILESTDOUT, "wb"); + fwrite("", 1, 1, tmp); // clear buffer. + fclose(tmp); + } + // close(stdout_); + fflush(stdout); + fclose(stdout); + stdout = fdopen(stdout_, "w"); + printf("(lua_server) lost connection %s:%d\n", ip, port); // to macros + close(csocket); + } } int main(int argc, char **argv) { - + catch_badsignals(); srand(time(NULL)); if (argc != 3) @@ -121,22 +157,21 @@ int main(int argc, char **argv) { return eprintf("can't start thread!\n"); } else puts("main server is inited"); - lua_State * L = start_lua(); + lua_State *L = start_lua(); puts("start lua server"); -for(int i = 0; i < 10; i++) - checkRetVal(L, i); + for (int i = 0; i < 10; i++) + checkRetVal(L, i); - servArgs args_luaserv = {"127.0.0.1", 6565, L}; + servArgs args_luaserv = {"127.0.0.1", 6566, L}; - if (pthread_create(&pthreadLuaServ, NULL, luaserv_fun, (void *)&args_luaserv) != 0) { + if (pthread_create(&pthreadLuaServ, NULL, luaserv_fun, + (void *)&args_luaserv) != 0) { return eprintf("can't start thread!\n"); } else puts("lua serv inited"); pthread_join(pthreadLuaServ, NULL); pthread_join(pthreadServ, NULL); - - clear_cryptocoins(cryptocoins); lua_close(L); diff --git a/src/stdout.txt b/src/stdout.txt deleted file mode 100644 index 1d39cdb..0000000 --- a/src/stdout.txt +++ /dev/null @@ -1,109 +0,0 @@ -Account balance of ANCMS_Abj1pcMsse: 2.000000 -start server -main server is inited -tgst - host 127.0.0.1 - istestnet true - user gostcoinrpc - password 97WDPgQADfazR6pQRdMEjQeDeCSzTwVaMEZU1dGaTmLo - name tgst - port 19376 -tdash - host 127.0.0.1 - istestnet true - user dash - password 123 - name tdash - port 19998 -ed25519 -Generate -PubKey: 82865E795D38ED048A2B6C2EAA7BF31E0F9C3DA9795D31C38ABE3422C21AE088 -PubKey1: 82865E795D38ED048A2B6C2EAA7BF31E0F9C3DA9795D31C38ABE3422C21AE088 -Correct init privKeys (ed25519) -RSA -getPubKey -PubKey: -----BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoW1QsFswHxYM28XrukZs -eQRjeKeviFy9vnrHwwLbPgTyhkNX4q+9b9kzb9nHJyIrbcUbayJ9N5hF2oolMma4 -gnEYxffeqL0F4KSWnw+iIC3xhdttR0VMjEBg7K11LUgz5BwUMJo597CEVYFujiIh -GSGam1ghl2DXjKU37RWl9dmj5sqOXvOrXrC/x5wvub1oLmoFfNzLbFIJCVP3yBfn -csBKkgsqeuN8m1nvKex978FPF2UpAb1Zekyk5V2Ws0vAN3IUjET6GafH/2EI/PVu -gLe+qi1G+LpS34QUnQty21wf4v3aoJJe98XHHr6IehY42lP2zSXr+Hn3JZw4liwR -6wIDAQAB ------END PUBLIC KEY----- -PubKey1: -----BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoW1QsFswHxYM28XrukZs -eQRjeKeviFy9vnrHwwLbPgTyhkNX4q+9b9kzb9nHJyIrbcUbayJ9N5hF2oolMma4 -gnEYxffeqL0F4KSWnw+iIC3xhdttR0VMjEBg7K11LUgz5BwUMJo597CEVYFujiIh -GSGam1ghl2DXjKU37RWl9dmj5sqOXvOrXrC/x5wvub1oLmoFfNzLbFIJCVP3yBfn -csBKkgsqeuN8m1nvKex978FPF2UpAb1Zekyk5V2Ws0vAN3IUjET6GafH/2EI/PVu -gLe+qi1G+LpS34QUnQty21wf4v3aoJJe98XHHr6IehY42lP2zSXr+Hn3JZw4liwR -6wIDAQAB ------END PUBLIC KEY----- -Correct init privKeys (RSA) -PrivKeys -ed25519 9CEED07DA82E0D3E879F6D00A9CC80643EAC9BACCE5DD10946AE32C27E10C6F6 -RSA -----BEGIN PRIVATE KEY----- -MIIE8gIBADANBgkqhkiG9w0BAQEFAASCBNwwggTYAgEBAoIBAQChbVCwWzAfFgzb -xeu6Rmx5BGN4p6+IXL2+esfDAts+BPKGQ1fir71v2TNv2ccnIittxRtrIn03mEXa -iiUyZriCcRjF996ovQXgpJafD6IgLfGF221HRUyMQGDsrXUtSDPkHBQwmjn3sIRV -gW6OIiEZIZqbWCGXYNeMpTftFaX12aPmyo5e86tesL/HnC+5vWguagV83MtsUgkJ -U/fIF+dywEqSCyp643ybWe8p7H3vwU8XZSkBvVl6TKTlXZazS8A3chSMRPoZp8f/ -YQj89W6At76qLUb4ulLfhBSdC3LbXB/i/dqgkl73xccevoh6FjjaU/bNJev4efcl -nDiWLBHrAgMBAAECggEAObsslkWmaheqtZaM/WteM9F7+ZSO1EfGnC6w7m9BFWcT -jSzca3fKWgvlt2S9MqOnwHQzoBcPjShqIwQw1VujNRNZdsN04Afp6DM0ouImazfD -HsogxLHC7OQUmiyX6ODMwOEzqCur5xibu1k9Dblxxribx8CjtOvgwmDH4BeBlGDs -S0gRt63ubBlIRvzYWVUyqmzokYfBymBwcdPO9iFGohVaSPbjp/qn1TVc02p2gmKV -gFf/T8SQvQQTSt6o8LkyCUokuFbNwIt5j/nn1G9DCAg1Da0ry1Z1oLzsta5Q+Brp -97oHrRwRGPp/gzUtZ29ePzF2BJBX0hqlohdRQeXqAQJWBoROTsAzUMAFFeMTn8ey -fFJHeS/I8e63k9g9ZsiVsOgHAhBbgwi8KXvtI8muPa3C5bitJVBJCGWkwHYjvag1 -OkHIDay1TxoOhvyjRFNgWgJH+3FxN7ECVgY4M64GxXyd9ZrPUyCmVyJnqlAiJiQn -pZu+TB8PQPghi1EFqlbKN3KegFj9HrfjZqn+rBn2feJQWqEyO58YfmRBh/qZY6w1 -FsLEAZD+KEW/K1jXmXnJAlYDcMaG/SIad8Y3j/NEYAHzcN0bNgc483coLvn70dp1 -04ofpNMrkukEXdENG+VJ2vsSnTWMhZ6JOGCK29RyxOOVJjWgQpZWdMNGsQrhf8NW -we2O6o2DgQJWBPX7Msov57BO4QaRta84PTcWwAgdCCWfkNR+/x85oTGQYDX2ond1 -NrV6hoCPafm2P83lFGhqDIQvZfgdWk89MVab0aVbvVYzK3MQFMjE8q0DND/0KREC -VWkxeFq2T/3pAoXB9Zp0Du4OBblfqgKFOnjKoNaAOPp1wgUE6lCeIXA6UQTHsC7V -MYeEsj6EwbdWBaadoXQ3j0PUcTmxFgkqmHTX4uCTmFOBtmIP5AkwggEMMIIBCAJW -A/uVEj95xo8KDe5foYpFAQa/SGOpCVQEou1littw0qbXxv39x8I1lrM1Un6oSQPe -XuF4KQyYLtXgDrtKSYTU5/ihFgRdpS1tEmKRdRH2hahJhlsTcQMCVgHK6SwPegZP -N51Rn6WcELcHjG1OvjS+pl+XLs8zOjL2ecTNab7RwUEVZHi/HYvPu/VE0srXKmBa -T8ERt7wjl5jZpde9G1FPgvp1dzcUYLuEJaPdtoB1AlYB+nFbO+NGlYb5DfSrdhRz -7A0fFqxkU3Cb7oGJmsNBIG/rSBTx9xbMtT27RAL63rIh7a9/0N4F7wzvIeMXQNQj -RALPgYtN1A0VwrlhqaHEi7v6fjsROA== ------END PRIVATE KEY----- 1776 - - -Check sign and verify - - -Sign: 397423C2846FB645CADA24E9C0B5F64E156A1FB753BC3D3C114953E8970F36163021BD82D92FB935D0EE26274100FA4B27746850F5D73C68315E8B6842AEA407 size of sign: 64 -verify check -spubkey 32 -pubkey ‚†^y]8íŠ+l.ª{óœ=©y]1ʾ4"Âàˆ -... -check correct pubkey -Is verified! -Check not correct pub key -Is not verified -verify check RSA -spubkey 450 -pubkey -----BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoW1QsFswHxYM28XrukZs -eQRjeKeviFy9vnrHwwLbPgTyhkNX4q+9b9kzb9nHJyIrbcUbayJ9N5hF2oolMma4 -gnEYxffeqL0F4KSWnw+iIC3xhdttR0VMjEBg7K11LUgz5BwUMJo597CEVYFujiIh -GSGam1ghl2DXjKU37RWl9dmj5sqOXvOrXrC/x5wvub1oLmoFfNzLbFIJCVP3yBfn -csBKkgsqeuN8m1nvKex978FPF2UpAb1Zekyk5V2Ws0vAN3IUjET6GafH/2EI/PVu -gLe+qi1G+LpS34QUnQty21wf4v3aoJJe98XHHr6IehY42lP2zSXr+Hn3JZw4liwR -6wIDAQAB ------END PUBLIC KEY----- -... -check correct pubkey -is not verified! -Check not correct pub key -Is not verified -ClearKeys -start lua server -lua serv inited -(lua server) listening on 127.0.0.1:6565 -bye!