Added default config file

This commit is contained in:
Bazsalanszky 2019-10-28 16:58:09 +01:00
parent 5b5c3d069d
commit beb0a4eb98
Signed by: Bazsalanszky
GPG key ID: 214701A3BD4B06F2
7 changed files with 118 additions and 68 deletions

View file

@ -1,6 +1,6 @@
# P2P-chat
A projekem célja (ahogy a neve is mondja) egy Peer to Peer chat alkalmazás létrehozása. A lénye az, hogy több gép egy hálózatot alkotva kommunikál egymással,azaz nincs egy központi szerver,ami az üzeneteket továbbítja a klienseknek,hanem minden üzenet közvetlenül megy a feladótól a címzettig.
A projektem célja (ahogy a neve is mondja) egy Peer to Peer chat alkalmazás létrehozása. A lénye az, hogy több gép egy hálózatot alkotva kommunikál egymással,azaz nincs egy központi szerver,ami az üzeneteket továbbítja a klienseknek,hanem minden üzenet közvetlenül megy a feladótól a címzettig.
## Szükséges könyvtárak

12
config.example.ini Normal file
View file

@ -0,0 +1,12 @@
#Becenév
#nickname=Pelda
#A program által használt port (Alapértelmezett: 6381)
port=6327
#Letiltja a külső csatlakozást (Alapértelmezett: false)
localmode=false
#Ezne a porton lesz elérhető a felhasználói felület (Alapértelmezett: 5381)
interface-port=5381
#Ebben a mappában vannak tárolva a html fájlok a felhasználói felülethez (Alapértelmezett: htdocs/)
interface-folder=htdocs/
#A felhasználói felület csak ezen a gépen érhető elő (Alapértelmezett: true;Ajánlott)
interface-local=true

View file

@ -23,7 +23,7 @@ A program ezekben az esetekben ír ki a képernyőre (és mindezt elmenti a `log
## Konfigurációs fájl
A konfigurációs fájl arra szolgál, hogy a felhasználó igényei szerint beállíthassa,hogy hogyan működjön a program.Ez a fájl a `config.txt`. Itt a különböző értékek soronként `kulcs=érték` formátumban vannak.
A konfigurációs fájl arra szolgál, hogy a felhasználó igényei szerint beállíthassa,hogy hogyan működjön a program.Ez a fájl a `config.ini`. Itt a különböző értékek soronként `kulcs=érték` formátumban vannak.
Ha egy sor kettős kereszttel(`#`) kezdődik,akkor azt a program kommentnek veszi.

View file

@ -8,16 +8,36 @@ config config_load(){
config cfg;
map_init(&cfg);
FILE * f;
f = fopen("config.txt","r");
f = fopen("config.ini","r");
if(f != NULL) {
char key[65], value[65];
while (fscanf(f, "%[^=]=%s\n", key, value) != EOF) {
//Comment in config
if (key[0] == '#') continue;
char buf[256], key[65], value[65];
while (fgets(buf, sizeof(buf), f) != NULL)
{
if (buf[0] == '#') continue;
sscanf(buf, "%[^=]=%s\n", key, value);
map_addPair(&cfg, map_make_pair(key, value));
ZeroMemory(key, 65);
ZeroMemory(value, 65);
ZeroMemory(buf, 256);
}
}else{
char* exampleConf= "#Becenév\n"
"#nickname=Pelda\n"
"#A program által használt port (Alapértelmezett: 6381)\n"
"port=6327\n"
"#Letiltja a külső csatlakozást (Alapértelmezett: false)\n"
"localmode=false\n"
"#Ezne a porton lesz elérhető a felhasználói felület (Alapértelmezett: 5381)\n"
"interface-port=5381\n"
"#Ebben a mappában vannak tárolva a html fájlok a felhasználói felülethez (Alapértelmezett: htdocs/)\n"
"interface-folder=htdocs/\n"
"#A felhasználói felület csak ezen a gépen érhető elő (Alapértelmezett: true;Ajánlott)\n"
"interface-local=true" ;
f = fopen("config.ini","w");
fprintf(f,exampleConf);
fclose(f);
}
return cfg;
}

View file

@ -5,56 +5,46 @@
#include "crypto.h"
#undef APPMACROS_ONLY
#include <openssl/applink.c>
RSA * createRSA(unsigned char * key,int public)
{
RSA *rsa= NULL;
BIO *keybio ;
RSA *createRSA(unsigned char *key, int public) {
RSA *rsa = NULL;
BIO *keybio;
keybio = BIO_new_mem_buf(key, -1);
if (keybio==NULL)
{
printf( "Failed to create key BIO");
if (keybio == NULL) {
logger_log("Failed to create key BIO");
return 0;
}
if(public)
{
rsa = PEM_read_bio_RSA_PUBKEY(keybio, &rsa,NULL, NULL);
if (public) {
rsa = PEM_read_bio_RSA_PUBKEY(keybio, &rsa, NULL, NULL);
} else {
rsa = PEM_read_bio_RSAPrivateKey(keybio, &rsa, NULL, NULL);
}
else
{
rsa = PEM_read_bio_RSAPrivateKey(keybio, &rsa,NULL, NULL);
}
if(rsa == NULL)
{
printf( "Failed to create RSA");
if (rsa == NULL) {
logger_log("Failed to create RSA");
}
return rsa;
}
RSA *createRSAfromFile(char *file, int pub) {
FILE * fp = fopen(file,"rb");
FILE *fp = fopen(file, "rb");
if(fp == NULL)
{
if (fp == NULL) {
return NULL;
}
RSA *rsa= RSA_new() ;
if(pub)
{
rsa = PEM_read_RSA_PUBKEY(fp, &rsa,NULL, NULL);
}
else
{
rsa = PEM_read_RSAPrivateKey(fp, &rsa,NULL, NULL);
RSA *rsa = RSA_new();
if (pub) {
rsa = PEM_read_RSA_PUBKEY(fp, &rsa, NULL, NULL);
} else {
rsa = PEM_read_RSAPrivateKey(fp, &rsa, NULL, NULL);
}
return rsa;
}
RSA *generate_key() {
int ret = 0;
RSA *r = NULL;
@ -65,8 +55,8 @@ RSA *generate_key() {
unsigned long e = RSA_F4;
bne = BN_new();
ret = BN_set_word(bne,e);
if(ret != 1){
ret = BN_set_word(bne, e);
if (ret != 1) {
BIO_free_all(bp_public);
BIO_free_all(bp_private);
RSA_free(r);
@ -76,7 +66,7 @@ RSA *generate_key() {
r = RSA_new();
ret = RSA_generate_key_ex(r, bits, bne, NULL);
if(ret != 1){
if (ret != 1) {
BIO_free_all(bp_public);
BIO_free_all(bp_private);
RSA_free(r);
@ -85,7 +75,7 @@ RSA *generate_key() {
}
bp_public = BIO_new_file("public.pem", "w+");
ret = PEM_write_bio_RSA_PUBKEY(bp_public, r);
if(ret != 1){
if (ret != 1) {
BIO_free_all(bp_public);
BIO_free_all(bp_private);
RSA_free(r);
@ -104,11 +94,11 @@ RSA *generate_key() {
}
void RSA_getPublicKey(RSA*r,char* pubkey){
void RSA_getPublicKey(RSA *r, char *pubkey) {
int keylen;
BIO *bio = BIO_new(BIO_s_mem());
int res = PEM_write_bio_RSA_PUBKEY(bio,r);
int res = PEM_write_bio_RSA_PUBKEY(bio, r);
keylen = BIO_pending(bio);
int re = BIO_read(bio, pubkey, keylen);
@ -119,25 +109,26 @@ void RSA_getPrivateKey(RSA *r, char *privkey) {
int keylen;
BIO *bio = BIO_new(BIO_s_mem());
int res = PEM_write_bio_RSAPrivateKey(bio,r,NULL,NULL,0,NULL,NULL);
int res = PEM_write_bio_RSAPrivateKey(bio, r, NULL, NULL, 0, NULL, NULL);
keylen = BIO_pending(bio);
int re = BIO_read(bio, privkey, keylen);
BIO_free_all(bio);
}
int public_encrypt(unsigned char *data, int data_len, unsigned char *key, unsigned char *encrypted) {
RSA * rsa = createRSA(key,1);
int result = RSA_public_encrypt(data_len,data,encrypted,rsa,RSA_PKCS1_PADDING);
RSA *rsa = createRSA(key, 1);
int result = RSA_public_encrypt(data_len, data, encrypted, rsa, RSA_PKCS1_PADDING);
return result;
}
int private_decrypt(unsigned char *enc_data, int data_len, unsigned char *key, unsigned char *decrypted) {
RSA * rsa = createRSA(key,0);
int result = RSA_private_decrypt(data_len,enc_data,decrypted,rsa,RSA_PKCS1_PADDING);
RSA *rsa = createRSA(key, 0);
int result = RSA_private_decrypt(data_len, enc_data, decrypted, rsa, RSA_PKCS1_PADDING);
return result;
}
int base64Encode(const unsigned char* input ,size_t len, char** output) {
int base64Encode(const unsigned char *input, size_t len, char **output) {
BIO *bio, *b64;
BUF_MEM *bufferPtr;
@ -152,28 +143,29 @@ int base64Encode(const unsigned char* input ,size_t len, char** output) {
BIO_set_close(bio, BIO_NOCLOSE);
BIO_free_all(bio);
*output=bufferPtr->data;
*output = bufferPtr->data;
return 0;
}
size_t calcDecodeLength(const char* b64input) { //Calculates the length of a decoded string
size_t calcDecodeLength(const char *b64input) { //Calculates the length of a decoded string
size_t len = strlen(b64input),
padding = 0;
if (b64input[len-1] == '=' && b64input[len-2] == '=') //last two chars are =
if (b64input[len - 1] == '=' && b64input[len - 2] == '=') //last two chars are =
padding = 2;
else if (b64input[len-1] == '=') //last char is =
else if (b64input[len - 1] == '=') //last char is =
padding = 1;
return (len*3)/4 - padding;
return (len * 3) / 4 - padding;
}
int base64Decode(const char* input, unsigned char**buffer,size_t* len) { //Decodes a base64 encoded string
int base64Decode(const char *input, unsigned char **buffer, size_t *len) { //Decodes a base64 encoded string
BIO *bio, *b64;
int decodeLen = calcDecodeLength(input);
*buffer = (unsigned char*)malloc(decodeLen + 1);
*buffer = (unsigned char *) malloc(decodeLen + 1);
(*buffer)[decodeLen] = '\0';
bio = BIO_new_mem_buf(input, -1);
@ -189,10 +181,10 @@ int base64Decode(const char* input, unsigned char**buffer,size_t* len) { //Decod
}
void printOpenSSLError(char *msg) {
char * err = malloc(130);;
char *err = malloc(130);;
ERR_load_crypto_strings();
ERR_error_string(ERR_get_error(), err);
logger_log("%s ERROR: %s\n",msg, err);
logger_log("%s ERROR: %s\n", msg, err);
free(err);
}

View file

@ -42,7 +42,33 @@ struct addrinfo* tcp_createIPv4Socket(SOCKET *s,int port,bool wildcard){
int tcp_bindnlisten(SOCKET s,struct addrinfo* addr,int conn_count){
int res = bind(s, addr->ai_addr, addr->ai_addrlen);
if (res == SOCKET_ERROR) {
logger_log("Error binding socket! Error: %d", WSAGetLastError());
logger_log("Error binding socket!");
switch(WSAGetLastError()){
case WSAENETDOWN:
logger_log("The network subsystem has failed.");
break;
case WSAEADDRINUSE:
logger_log("Port already in use.");
break;
case WSAEACCES:
logger_log("An attempt was made to access a socket in a way forbidden by its access permissions.");
break;
case WSAEADDRNOTAVAIL:
logger_log("The requested address is not valid in its context.");
break;
case WSAEFAULT:
logger_log("The system detected an invalid pointer address in attempting to use a pointer argument in a call.");
break;
case WSAEINPROGRESS:
logger_log("A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.");
break;
case WSAEINVAL:
logger_log("This socket is already bound to an address.");
break;
case WSAENOBUFS:
logger_log("Not enough buffers are available or there are too many connections!");
break;
}
freeaddrinfo(addr);
WSACleanup();
return 1;