/* Copyright (C) 2019-2020 Toldi Balázs Ádám This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . File created at: 2019. 10. 14. */ #pragma once #define _CRT_SECURE_NO_WARNINGS #include "../utility.h" #include "../lib/tcp-listener.h" #include "peer.h" #include "config.h" #include "../lib/debugmalloc/debugmalloc.h" /*! * @brief A felhasználói felület számára szükséges adatokat tárolja */ typedef struct WebIO{ //!A felhasználói felület socket-e SOCKET socket; //! A mappa amiben a felhasználói felület fájljai vannak char folder[65]; //! A peerek listájának mutatója struct PeerList * list; } WebIO; /*! * @brief A kapott adatok alapján létrehozza a felhasználói felületet * @param[in] config A program konfigurációja lásd config.h * @param[in] list A peerek listájának mutatója * @param[out] webIo Mutató arra struktúrára ahová az adatokat írni szeretnénk * @return A művelet sikerességét jelző szám * * * * * * *
KódJelentése
0A művelet sikeres volt
1A bind() függvény futása közben hiba lépett fel
2A listen() függvény futása közben hiba lépett fel
3A tcp_createIPv4Socket() függvény futása közben hiba lépett fel
*/ int webio_create(Config config, struct PeerList *list, WebIO *webIo); /*! * @brief Fogadja a socket-re érkező csatlakozásokat és a HTTP request-ek alapján elküldi a HTTP response-okat * @param[in] wio A felhasználói felület struktúrája * @return A művelet sikerességét jelző szám.(Ha 0, akkor a sikeres volt,egyébként sikertelen) */ int webio_handleRequest(WebIO wio); /*! * @brief Ez a függvény kezeli a HTTP GET request-eket. Elküldi a kért filokat. * @param[in] client A socket amire az adatokat kell küldeni * @param[in] wio A felhasználói felület struktúrája * @param[in] file A kért file neve * @return A művelet sikerességét jelző szám.(Ha 0, akkor a sikeres volt,egyébként sikertelen) */ static int webio_handleGETrequest(SOCKET client, WebIO wio, char *file); /*! * @brief Ez a függvény kezeli a HTTP POST request-eket. * @param[in] client A socket amire az adatokat kell küldeni * @param[in] wio A felhasználói felület struktúrája * @param[in] post A kapott adatokat tároló Map * @return A művelet sikerességét jelző szám.(Ha 0, akkor a sikeres volt,egyébként sikertelen) */ static int webio_handlePOSTrequest(SOCKET client, WebIO wio, Map post); /*! * @brief a file neve alapján visszaadja a típusához tartozó MIME típust * @param[in] filename A file neve * @return A file típusához tartozó MIME típus */ static char* webio_getMIMEtype(char* filename); /*! * Visszaadja a paraméterként kapott fájl kiterjesztését * @param[in] filename A fájl neve * @return A fájl kiterjesztése * @note A visszatérési érték címét a malloc() függvénnyel foglalja le,így később fel kell azt szabadítani */ static char* webio_getFiletype(char* filename); /*! * @brief Betölti a fejlécet a főbb oldalakhoz * @param[in] folder A mappa amiben a fejléc fájl(header.html) található * @param[out] result A fejléc tartalma */ static void webio_getHeader(char* folder, char result[]); /*! * @brief Betölti a főoldal tartalmát * @param[in] wio A felhasználói felület struktúrája * @param outputBuffer Ebbe a buffer-be fogja a főoldalt betölteni */ static void webio_getIndex(WebIO wio, char *outputBuffer); /*! * @brief Betölti egy megadott peerhez tartozó oldal tartalmát * @param[in] wio A felhasználói felület struktúrája * @param[in] id A peer,aminek az oldalát szeretnénk betölteni * @param[out] outputBuffer Ebbe a buffer-be fogja az oldalt betölteni */ static void webio_getPeerPage(WebIO wio, char *id, char *outputBuffer); /*! * @brief Megnézi hogy egy adott azonosítójú peer létezik.e * @param[in] folder A felhasználói felület mappája * @param[in] id A peer azonosítója amit keresünk * @return Igaz vagy hamis érték az alapján hogy a peer létezik-e( vagy létezett) */ static bool webio_isPeerFound(char* folder,char* id); /*! * @brief Elküldi a HTTP header-t,ami azt jelzi fogy a kért file létezik * @param[in] socket A socket amire a header-t szeretnénk küldeni * @param[in] file A kért file neve * @note Ha ismerjük a file(vagyis az oldal) méretét, érdemesebb a webio_sendOKHeader_wSize() függvényt használni */ static void webio_sendOKHeader(SOCKET socket,char* file); /*! * @copybrief webio_sendOKHeader * @param[in] socket A socket amire a header-t szeretnénk küldeni * @param[in] file A kért file neve * @param[in] size A kért file mérete */ static void webio_sendOKHeader_wSize(SOCKET socket,char* file,int size); /*! * @brief Elküld a egy oldalt * @param[in] socket A socket amire az oldalt küldeni szeretnénk * @param[in] content Az oldal tartalma */ static void webio_sendPage(SOCKET socket, char* content); /*! * @brief Elküldi a HTTP header-t,ami azt jelzi fogy a kért file nem létezik * @param[in] socket A socket amire a header-t szeretnénk küldeni */ static void webio_send404Page(SOCKET socket); /*! * @brief Kigyűjti az offline üzeneteket egy sztringbe * @param[in] wio A felhasználói felület struktúrája * @param[in,out] content A sztring, amibe a írni fog */ static void getOfflineMessages(WebIO wio, char *content); /*! * @brief Elküld egy file. * @param[in] path A file helye * @param[in] client A fogadó socket-e */ static void sendFile(char* path, SOCKET client);