Skip to content

Expooo7/HTTP_app_project

Repository files navigation

Tema3 HTTP Berevoescu Remus-Napoleon

->client.c:

In client.c vom citi comenzile de la user, deschidem conexiunea catre server si retinem in variabile globale session tokenul (pt a arata ca suntem logged in ca un anumit user) si jwt library token (pt a arata ca avem access la filme/librarii).

->parson.c:

Am ales parson pentru ca e mic si simplu. Scopul librariei este sa ma ajute sa creez payload-ul in POST si PUT requests si sa citesc payloadul din replyuri.

->requests.c:

Fisier inspirat din laboratorul de HTTP dar am pastrat numai ce imi este util. Avem functii de tipul compute_X_request pentru crearea rapida a POST, GET, DELETE, PUT requests cu fieldurile potrivite (headere, cookies, host, content, etc...). Mai avem si functii ajutatoare cum ar fi make_session_cookie care primeste un pointer la string si il modifica sa pointeze catre un string nou alocat cu valoarea session cookieului, get_json_payload care primeste un pointer catre un HTTP reply si il seteaza la inceputul payloadului json, pentru a ajuta functiile din Parson sa poata parsa payloadul.

->utils.c:

Diverse functii pt citire de stringuri, validare de stringuri, de numere: string_has_space valid_int valid_float read_string. Avem si doua functii analoage pt comenzile get_movie si add_movie_to_collection, dar care nu citesc de la tastatura input, ci il primesc ca argumente. Astea sunt folosite intern de comanda add_collection pentru a valida fiecare film ce are sa fie adaugat.

->commands.c:

Aici e principalul cod al temei. De aici cheama clientul fiecare comanda in parte. Fiecare comanda citeste de la tastatura cu read_string, isi creeaza requestul, il trimite, asteapta replyul, verifica daca este o eroare sau nu si apoi (la unele functii) modifica state-ul global al programului (session token, jwt lib token).

Daca http reply-ul nu contine un element JSON in el, vom afisa eroarea BAD REQUEST, daca primim un JSON cu field name error printam ERROR, daca nu consideram operatia completata cu succes si printam SUCCES si facem modificari pertinente.

Functia read_string citeste de la tastatura pana la caracterul newline iar validarea datelor in diverse cazuri (sa fie int, sa fie float, sa nu aiba spatii etc..) se intampla imediat dupa citire, in corpul comenzii. Daca nu trece validarea, printam ERROR: X must be an integer sau asemanator.

Comanda exit nu exista, cand se citeste exit de la tastatura codul din client.c va printa Exiting... si inchide programul.

->Makefile:

Makefile-ul creaza un folder numit out in care isi pune toate fisierele .o pentru a fi estetic placut, apoi creaza binarul client in root folder. Compilat cu -Wall -Wextra aproape fara warn-uri si avem si comanda de make clean.

Observatie finala:

Tema a mers ok, consider ca cerinta e indeplinita intocmai. Cateva memory-leakuri (~10) inca sunt prezente si ar fi usor de reparat, insa sunt in mica pana de timp asa ca le voi lasa ca exercitiu pentru echipa de corectare pcom. Ce nu imi place este ca commands.c este foooarte lung (1000 linii) si ar trebui realistic spart in subfisiere (poate unul pt login-type commands, unul pt movie-related, unul pt collection-related), dar din nou sunt in mica pana de timp, dar asta as face prima data.

OK gata, tema bomba nota maxima va rog si slaut.

About

project3

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors