lua server

master
wipedlife 2021-06-28 09:09:01 +03:00
parent 0163a03c6d
commit dc804b9552
3 changed files with 120 additions and 196 deletions

View File

@ -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()

View File

@ -5,7 +5,7 @@
#include <pthread.h>
#include <time.h>
//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);

View File

@ -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!