From 0a572e0d27a29078646b847fe4f16ad75f673954 Mon Sep 17 00:00:00 2001 From: tom_win Date: Fri, 10 Apr 2020 19:04:14 +0200 Subject: [PATCH] serial --- kniznica/komunikacia.c | 2 +- kniznica/komunikacia.h | 2 +- kniznica/kryptografia.c | 2 +- kniznica/kryptografia.h | 2 +- rs232_kanal/klient.c | 43 +++++++++++++++++++++++------------ rs232_kanal/klient.txt | Bin 928 -> 1013 bytes rs232_kanal/server.c | 48 ++++++++++++++++++++++++++-------------- rs232_kanal/server.txt | Bin 204 -> 1485 bytes 8 files changed, 65 insertions(+), 34 deletions(-) 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 a4ddae4662ae081d3b3361858e249d6d12a15001..8d2aea9f606be7a68e3b6cb47189be526f1c9b64 100644 GIT binary patch delta 397 zcmV;80doGJ2lWS576StSQUU+~P6GqbD&_6W@=xoO5REcC&!Qgc2Ja72t=R|DMt5Ze zoZ-hHo-j|06xa&wNqAjqo)Y^4DhujuvHW9?^K-6ECoX3#z%T#+1^^2H0s*mFWB~!Y zlfD630lSkJ0&D@QlY|0Ue~k&f{o;C`+JCsIp>L+~ERJOg#K**=0Yl_he|>s_2RpjD zi*%Ef+U1{#?;rTFT84n(1GYeYS34^{x+z%T#+3IGcL0s#O37XYzV zWC4@A0a}w50&J6m0$G2!%HCfo_(tsND{YfkC}K~dVEiik%rO${j9UK7tsZA%NjaK$ z;vn@_gAzP0pBew;qJOkWPe0#Q2?{&-psyze0RVt&MhLAyk3|(iAVXn}hVs9R#aBuW zMK~okKNMGMX#4)6ZBGig=EW(apj9kVrxLf(7qe&QAn_*@>xM+(KIF5H`AD3S$W#`n zK~0z+pBnTCY;Ik$%q^bxfAO4jYfSTf;FON=CMx3QGMKo*&Kkw?8viG!*bw)oL9f5OEQl=t 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 6dc69aee39301d6a0bcd3a6484ee13f7d9a38255..098477927491ad302517ceb0ba9a4519630dd68a 100644 GIT binary patch literal 1485 zcmWe*W@hMSWMF7#W`5{*bH$&zZfO_3p4rsGyr)gr^!%(SKk;od?(iu`PWmLvz@T?P z=YaMBg9G{u^BLwHP(Pr2K;wYQ0j>j_2iOmA91uAmd_eGk5JNUYI)f#HF@qS;SOW%L z1`!4!HfC047G@@9Hbz!P7Di@9CPoHs1|Y$}#lXkF!yw5Z!642c${@@jAjZthR0NdE zV_?c=V9GFPVoEV+Vm!+vlCoj3Q0Fi0%X`j0_Pu1YdB34}vycHV8>d#AN85K^Mn-N{ z27_WlZUas>=1>+kVWwbjLoNdj5Ql?@QP+?ks20d(=V9~CFV0L(H54@92MKWTa5$Eh z+XH;H{72$NzbhN?W)@@y&+Fs8{ItBdyl{Mm^J@O*}~K2{1c0p=geGR|K@K~ou=c> z&GrKOp4!i?uwA=;W!-=66)MFJ)fYYr2TWS^qQyk!QO}XdI#m^aANp%EF*7nSB0CQl zZOlM-bw8E}_{IHvrs2gmO74%8mc^f&`uz3XkW&T=;>68PtNx$hr1jGL%*JRx=RXN$ zA7nS5HQ;=BYn75oLrbdhmm4)5^S3W7TmSm&1I)|<;72OrD^EI^{mIccKlO2Pb00V=QBg?9Y+BK#e zeA-s=Dzmie^#wf9$sF~Vqfu$+n&`QbQ*YNRz3NeIb@_!$^l*ccfa+M8UeIu?9cRw&RGeKbb!WsJb4yjg|*zB>EAZa>Oy z>Uf(cd-L(Lyz@7t&sZ_ZQs`EJ)w-9WJED?zW&N9ZgYj{Y z2+%Q%j36gztWGcZE4w&W@8_BPinia6<)(CpY5D9;U%$dU)nQuPg8N~Wg=Xr`+UDXw z#Su`&`c)Ewetn_~8#N8o|4iPV^C~)i)-=1h+lme6t~NCCpBowR*1cd=Tdmyu=DhbY zSF%3uzIAv}f}GxdJCp3luuk^_Z>Q*OfA-<&tq4Jm%MZ9_%>@~50X5v$4H;kmG@Zq>P*f4AC-6R$s#K-e!YIOR$J|h zX3>)$V!U~;*mUiyy^XBEZv z8ah^3GQ%_r%u{2CaYh(pmK`)*3&_Ne%bkmL@2B@G2zls{FC?g9Q S5){1g!T0|u%{w^>KHvvT95=`S