lua server
parent
0163a03c6d
commit
dc804b9552
|
@ -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()
|
||||
|
||||
|
||||
|
|
197
src/main.c
197
src/main.c
|
@ -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);
|
||||
|
|
109
src/stdout.txt
109
src/stdout.txt
|
@ -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!
|
Loading…
Reference in New Issue