diff --git a/kniznica/komunikacia.c b/kniznica/komunikacia.c index 1d172ed..29252ae 100644 --- a/kniznica/komunikacia.c +++ b/kniznica/komunikacia.c @@ -10,7 +10,7 @@ #include "kryptografia.h" #include "rs232.h" -int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta, nastavenia_aplikacie *nastavenia) +int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_aplikacie *nastavenia) { int uspech; diff --git a/kniznica/komunikacia.h b/kniznica/komunikacia.h index 62593be..2b7c52d 100644 --- a/kniznica/komunikacia.h +++ b/kniznica/komunikacia.h @@ -89,7 +89,7 @@ int cakat_na_komunikaciu(int cislo_portu); * @parameter char* cesta: ukazuje na retazec, ktory reprezentuje cestu k suboru * @vrati int : operacia bola uspesna(0), neuspesna(-1) */ -int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta, nastavenia_aplikacie* nastavenia); +int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_aplikacie* nastavenia); /** * prijat_subor: realizuje prijem suboru diff --git a/kniznica/kryptografia.c b/kniznica/kryptografia.c index 5da843c..a23e076 100644 --- a/kniznica/kryptografia.c +++ b/kniznica/kryptografia.c @@ -544,7 +544,7 @@ void zobraz_certifikat(WOLFSSL* ssl) X509_free(certifikat); } -byte* generovat_kontrolny_sucet_suboru(hashovacia_funkcia funkcia, char* cesta, int* velkost) +byte* generovat_kontrolny_sucet_suboru(hashovacia_funkcia funkcia, const char* cesta, int* velkost) { int pocet_bajtov; FILE* subor = fopen(cesta, "rb"); diff --git a/kniznica/kryptografia.h b/kniznica/kryptografia.h index 1e51c32..f4b7a8f 100644 --- a/kniznica/kryptografia.h +++ b/kniznica/kryptografia.h @@ -41,7 +41,7 @@ typedef struct nastavenia_aplikacie { * na zaklade nazvu funkcie uvedenom v prvom argumente * @vrati smernik na vygenerovany hash */ -byte* generovat_kontrolny_sucet_suboru(hashovacia_funkcia funkcia, char* cesta, int* velkost); +byte* generovat_kontrolny_sucet_suboru(hashovacia_funkcia funkcia, const char* cesta, int* velkost); /** * generovat_ecc_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority, diff --git a/rs232_kanal/klient.c b/rs232_kanal/klient.c index c23811f..75640d8 100644 --- a/rs232_kanal/klient.c +++ b/rs232_kanal/klient.c @@ -41,7 +41,8 @@ #define KOMUNIKACNY_SUBOR "klient.txt" int rs232_prijat; -int cislo_rozhrania = 4; +int cislo_rozhrania = 0; +int prebieha_nacitanie = 0; int aktualne_data = 0; int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx) @@ -53,7 +54,6 @@ int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx) { FILE* f = fopen(KOMUNIKACNY_SUBOR, "ab"); int nacitane_data = 0; - int prebieha_nacitanie = 0; unsigned char znak; //kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy @@ -67,26 +67,43 @@ int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx) uspech = RS232_PollComport(cislo_rozhrania, &znak, 1); if(uspech > 0) { - if((znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia <= 2)) + if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia <= 2)) { zaciatok_spravy_pozicia++; } - else if((znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia > 2)) + else if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia == 3)) { //ak bol najdeny koniec kontrolneho vzoru, tak je zapnuta znacka, //ktora urcuje ze prebieha nacitavanie spravy prebieha_nacitanie = 1; - zaciatok_spravy_pozicia = 0; + zaciatok_spravy_pozicia = 0; + //zaciatok_spravy_pozicia = 0; } - else if((prebieha_nacitanie) && (znak == koniec_spravy[koniec_spravy_pozicia]) && (koniec_spravy_pozicia <= 2)) + else if((prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia == 0)) || (!prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia <= 2))) { koniec_spravy_pozicia++; + prebieha_nacitanie = 0; } - else if((prebieha_nacitanie) && (znak == koniec_spravy[koniec_spravy_pozicia]) && (koniec_spravy_pozicia > 2)) + else if(!prebieha_nacitanie && znak != koniec_spravy[0]) + { + for(int i = 0; i < koniec_spravy_pozicia; i++) + { + fwrite((char*)&koniec_spravy[i], 1, uspech, f); + nacitane_data += uspech; + } + fwrite((char*)&znak, 1, uspech, f); + nacitane_data += uspech; + + koniec_spravy_pozicia = 0; + prebieha_nacitanie = 1; + } + else if(!prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia == 3)) { //ak bol najdeny koniec kontrolneho vzoru, tak je vypnuta znacka, //ktora urcuje ze prebieha nacitanie spravy prebieha_nacitanie = 0; + koniec_spravy_pozicia = 0; + //koniec_spravy_pozicia = 0; break; } else @@ -99,11 +116,10 @@ int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx) } } } - printf("Nacital som %d dat\n", nacitane_data); - aktualne_data = nacitane_data; + aktualne_data = nacitane_data; + nacitane_data = 0; fclose(f); } - //nacitanie dat zo suboru do buffera uspech = 0; while(uspech <= 0) @@ -119,9 +135,9 @@ int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx) unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA}; unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB}; RS232_SendBuf(cislo_rozhrania, (unsigned char*)zaciatok_spravy, sizeof(zaciatok_spravy)); - uspech = (int)RS232_SendBuf(cislo_rozhrania, (unsigned char*)buf, (size_t)sz); + uspech = (int)RS232_SendBuf(cislo_rozhrania, (unsigned char*)buf, sz); RS232_SendBuf(cislo_rozhrania, (unsigned char*)koniec_spravy, sizeof(koniec_spravy)); - printf("Odoslal som %d %d\n", uspech, sz); + RS232_flushTX(cislo_rozhrania); return uspech; } @@ -132,7 +148,7 @@ int main(int argc, char const *argv[]) int rychlost = 9600; WOLFSSL *ssl; WOLFSSL_CTX *ctx = NULL; - char* subor = NULL; + const char* subor = NULL; int zadane_rozhranie = 0; int uvedeny_subor = 0; int nacitanie_zo_suboru = 0; @@ -203,7 +219,6 @@ int main(int argc, char const *argv[]) } else if(!strcmp(argv[i+1], "ecc")) { - printf("jo\n"); wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita/autorita_ecc.pem", NULL); if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1; wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0); diff --git a/rs232_kanal/klient.txt b/rs232_kanal/klient.txt index a4ddae4..8d2aea9 100644 Binary files a/rs232_kanal/klient.txt and b/rs232_kanal/klient.txt differ diff --git a/rs232_kanal/server.c b/rs232_kanal/server.c index 6f315d8..f7d81dd 100644 --- a/rs232_kanal/server.c +++ b/rs232_kanal/server.c @@ -42,8 +42,10 @@ int rs232_prijat; int cislo_rozhrania = 0; +int prebieha_nacitanie = 0; int aktualne_data = 0; + int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx) { int uspech = 0; @@ -53,7 +55,6 @@ int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx) { FILE* f = fopen(KOMUNIKACNY_SUBOR, "ab"); int nacitane_data = 0; - int prebieha_nacitanie = 0; unsigned char znak; //kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy @@ -67,26 +68,43 @@ int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx) uspech = RS232_PollComport(cislo_rozhrania, &znak, 1); if(uspech > 0) { - //ak bol najdeny koniec kontrolneho vzoru, tak je zapnuta znacka, - //ktora urcuje ze prebieha nacitavanie spravy - if((znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia <= 2)) + if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia <= 2)) { zaciatok_spravy_pozicia++; } - else if((znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia > 2)) + else if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia == 3)) { + //ak bol najdeny koniec kontrolneho vzoru, tak je zapnuta znacka, + //ktora urcuje ze prebieha nacitavanie spravy prebieha_nacitanie = 1; - zaciatok_spravy_pozicia = 0; + zaciatok_spravy_pozicia = 0; + //zaciatok_spravy_pozicia = 0; } - else if((prebieha_nacitanie) && (znak == koniec_spravy[koniec_spravy_pozicia]) && (koniec_spravy_pozicia <= 2)) + else if((prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia == 0)) || (!prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia <= 2))) { koniec_spravy_pozicia++; - } - //ak bol najdeny koniec kontrolneho vzoru, tak je vypnuta znacka, - //ktora urcuje ze prebieha nacitanie spravy - else if((prebieha_nacitanie) && (znak == koniec_spravy[koniec_spravy_pozicia]) && (koniec_spravy_pozicia > 2)) - { prebieha_nacitanie = 0; + } + else if(!prebieha_nacitanie && znak != koniec_spravy[0]) + { + for(int i = 0; i < koniec_spravy_pozicia; i++) + { + fwrite((char*)&koniec_spravy[i], 1, uspech, f); + nacitane_data += uspech; + } + + fwrite((char*)&znak, 1, uspech, f); + nacitane_data += uspech; + koniec_spravy_pozicia = 0; + prebieha_nacitanie = 1; + } + else if(!prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia == 3)) + { + //ak bol najdeny koniec kontrolneho vzoru, tak je vypnuta znacka, + //ktora urcuje ze prebieha nacitanie spravy + prebieha_nacitanie = 0; + koniec_spravy_pozicia = 0; + //koniec_spravy_pozicia = 0; break; } else @@ -100,11 +118,9 @@ int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx) } } aktualne_data = nacitane_data; - printf("Nacital som %d dat\n", nacitane_data); - + nacitane_data = 0; fclose(f); } - //nacitanie dat zo suboru do buffera uspech = 0; while(uspech <= 0) @@ -124,7 +140,7 @@ int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx) RS232_SendBuf(cislo_rozhrania, (unsigned char*)zaciatok_spravy, 4); uspech = RS232_SendBuf(cislo_rozhrania, (unsigned char*)buf, sz); RS232_SendBuf(cislo_rozhrania, (unsigned char*)koniec_spravy, 4); - printf("Odoslal som %d %d\n", uspech, sz); + RS232_flushTX(cislo_rozhrania); return uspech; } diff --git a/rs232_kanal/server.txt b/rs232_kanal/server.txt index 6dc69ae..0984779 100644 Binary files a/rs232_kanal/server.txt and b/rs232_kanal/server.txt differ