From bd1e8c5a36b323c92e31fbd9bdfa702b552de1e9 Mon Sep 17 00:00:00 2001 From: PoliEcho Date: Sat, 9 Nov 2024 12:23:07 +0100 Subject: [PATCH] refactoring + signal handling --- Makefile | 13 +++++--- src/baka-api.cpp | 33 -------------------- src/baka-api.h | 3 -- src/color.h | 17 ++++++++++ src/helper_funcs.cpp | 22 +++++++++++++ src/helper_funcs.h | 1 + src/main.cpp | 74 ++++++++++++++++++++++++++++++++------------ src/main.h | 5 +++ src/net.cpp | 49 +++++++++++++++++++++++++++++ src/net.h | 4 +++ 10 files changed, 161 insertions(+), 60 deletions(-) delete mode 100644 src/baka-api.cpp delete mode 100644 src/baka-api.h create mode 100644 src/color.h create mode 100644 src/helper_funcs.cpp create mode 100644 src/helper_funcs.h create mode 100644 src/main.h create mode 100644 src/net.cpp create mode 100644 src/net.h diff --git a/Makefile b/Makefile index dc00d4c..2dd68cc 100644 --- a/Makefile +++ b/Makefile @@ -1,20 +1,23 @@ CC = g++ -CC_FLAGS = -s -O3 -lncurses -lcurl -Wall -Wextra +CC_FLAGS = -O3 -lncurses -lcurl -Wall -Wextra #debug flags: #CC_FLAGS = -ggdb `pkg-config --cflags --libs gtkmm-4.0` -Wall -Wextra all: build/bin/pupes-slots -build/bin/pupes-slots: build/obj/main.o build/obj/baka-api.o - $(CC) $(CC_FLAGS) build/obj/main.o build/obj/baka-api.o -o build/bin/bakatui +build/bin/pupes-slots: build/obj/main.o build/obj/net.o build/obj/helper_funcs.o + $(CC) $(CC_FLAGS) build/obj/main.o build/obj/net.o build/obj/helper_funcs.o -o build/bin/bakatui build/obj/main.o: src/main.cpp mkdir -p build/obj mkdir -p build/bin $(CC) $(CC_FLAGS) -c src/main.cpp -o build/obj/main.o -build/obj/baka-api.o: src/baka-api.cpp - $(CC) $(CC_FLAGS) -c src/baka-api.cpp -o build/obj/baka-api.o +build/obj/net.o: src/net.cpp + $(CC) $(CC_FLAGS) -c src/net.cpp -o build/obj/net.o + +build/obj/helper_funcs.o: src/helper_funcs.cpp + $(CC) $(CC_FLAGS) -c src/helper_funcs.cpp -o build/obj/helper_funcs.o clean: rm -fr build \ No newline at end of file diff --git a/src/baka-api.cpp b/src/baka-api.cpp deleted file mode 100644 index 4b79e02..0000000 --- a/src/baka-api.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include - -namespace bakaapi { - - // Callback function to write data into a std::string - size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) { - size_t totalSize = size * nmemb; - userp->append((char*)contents, totalSize); - return totalSize; -} - - void login() { - CURL* curl; - std::string response; - - char url[] = "https://c-for-dummies.com/curl_test.txt"; - - curl = curl_easy_init(); - if(curl) { - curl_easy_setopt(curl, CURLOPT_URL, url); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); - - curl_easy_perform(curl); // Perform the request - - std::cout << "this is responce: "<< response << std::endl; // Output the result - - curl_easy_cleanup(curl); // Cleanup - } - } -} \ No newline at end of file diff --git a/src/baka-api.h b/src/baka-api.h deleted file mode 100644 index 49f8dac..0000000 --- a/src/baka-api.h +++ /dev/null @@ -1,3 +0,0 @@ -namespace bakaapi { - void login(); -} \ No newline at end of file diff --git a/src/color.h b/src/color.h new file mode 100644 index 0000000..c5816d0 --- /dev/null +++ b/src/color.h @@ -0,0 +1,17 @@ +#define RESET "\033[0m" +#define BLACK "\033[30m" /* Black */ +#define RED "\033[31m" /* Red */ +#define GREEN "\033[32m" /* Green */ +#define YELLOW "\033[33m" /* Yellow */ +#define BLUE "\033[34m" /* Blue */ +#define MAGENTA "\033[35m" /* Magenta */ +#define CYAN "\033[36m" /* Cyan */ +#define WHITE "\033[37m" /* White */ +#define BOLDBLACK "\033[1m\033[30m" /* Bold Black */ +#define BOLDRED "\033[1m\033[31m" /* Bold Red */ +#define BOLDGREEN "\033[1m\033[32m" /* Bold Green */ +#define BOLDYELLOW "\033[1m\033[33m" /* Bold Yellow */ +#define BOLDBLUE "\033[1m\033[34m" /* Bold Blue */ +#define BOLDMAGENTA "\033[1m\033[35m" /* Bold Magenta */ +#define BOLDCYAN "\033[1m\033[36m" /* Bold Cyan */ +#define BOLDWHITE "\033[1m\033[37m" /* Bold White */ \ No newline at end of file diff --git a/src/helper_funcs.cpp b/src/helper_funcs.cpp new file mode 100644 index 0000000..a7fe472 --- /dev/null +++ b/src/helper_funcs.cpp @@ -0,0 +1,22 @@ +#include +#include +void safe_exit(int code) { + switch (code) { + case SIGTERM: + std::cerr << "received SIGTERM exiting...\n"; + break; + case SIGINT: + std::cerr << "received SIGINT exiting...\n"; + break; + case SIGQUIT: + std::cerr << "received SIGQUIT exiting...\n"; + break; + + case SIGSEGV: + std::cerr << "received SIGSEGV(segmentaiton fault) exiting...\nIf this " + "repeats please report this bug\n"; + break; + } + + exit(code); +} \ No newline at end of file diff --git a/src/helper_funcs.h b/src/helper_funcs.h new file mode 100644 index 0000000..aa0e692 --- /dev/null +++ b/src/helper_funcs.h @@ -0,0 +1 @@ +void safe_exit(int code); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 4a34732..f5fbf40 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,27 +1,63 @@ +#include "main.h" +#include "color.h" +#include "helper_funcs.h" +#include "net.h" +#include +#include #include -#include "baka-api.h" +#include +#include +#include -int main(int argc, char ** argv) { - /*initscr(); +int main(int argc, char **argv) { + // signal handlers + signal(SIGTERM, safe_exit); + signal(SIGINT, safe_exit); + signal(SIGQUIT, safe_exit); - // creating a window; - // with height = 15 and width = 10 - // also with start x axis 10 and start y axis = 20 - WINDOW *win = newwin(15, 17, 2, 10); - refresh(); + // error signal handlers + signal(SIGSEGV, safe_exit); - // making box border with default border styles - box(win, 0, 0); + CURL *curl = curl_easy_init(); + std::string bakaapi_url; + /*initscr(); - // move and print in window - mvwprintw(win, 0, 1, "Greeter"); - mvwprintw(win, 1, 1, "Hello"); + // creating a window; + // with height = 15 and width = 10 + // also with start x axis 10 and start y axis = 20 + WINDOW *win = newwin(15, 17, 2, 10); + refresh(); - // refreshing the window - wrefresh(win); + // making box border with default border styles + box(win, 0, 0); - getch(); - endwin(); */ - bakaapi::login(); - return 0; + // move and print in window + mvwprintw(win, 0, 1, "Greeter"); + mvwprintw(win, 1, 1, "Hello"); + + // refreshing the window + wrefresh(win); + + getch(); + endwin(); */ + std::cout << "enter school bakalari url:\n"; + while (true) { + std::cout << "(or q to quit )"; + std::cin >> bakaapi_url; + + const std::regex url_regex_pattern( + R"((http|https)://(www\.)?[a-zA-Z0-9@:%._\+~#?&//=]{2,256}\.[a-z]{2,6}(/\S*)?)"); + + if (std::regex_match(bakaapi_url, url_regex_pattern)) { + break; + } else if (bakaapi_url == "q") { + std::cerr << GREEN "[NOTICE] " << RESET "user quit\n"; + return 255; + } + std::cerr << "enter valid url using following pattern " + "[(http|https)://school.bakalari.url]\n"; + } + + bakaapi::login(); + return 0; } \ No newline at end of file diff --git a/src/main.h b/src/main.h new file mode 100644 index 0000000..43ea1e1 --- /dev/null +++ b/src/main.h @@ -0,0 +1,5 @@ +#include +#include + +extern CURL *curl; +extern std::string bakaapi_url; diff --git a/src/net.cpp b/src/net.cpp new file mode 100644 index 0000000..be19aa5 --- /dev/null +++ b/src/net.cpp @@ -0,0 +1,49 @@ +#include "net.h" +#include "color.h" +#include "main.h" +#include +#include +#include +#include + +CURL *curl; + +// Callback function to write data into a std::string +size_t WriteCallback(void *contents, size_t size, size_t nmemb, + std::string *userp) { + size_t totalSize = size * nmemb; + userp->append((char *)contents, totalSize); + return totalSize; +} + +void setup_for_curl_request(std::string endpoint, std::string &response) { + // CHANGE URL LATER + char url[] = ""; + if (curl) { + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); + + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + } else { + std::cerr << RED "[ERROR] " << RESET "curl not initialised\n"; + exit(2); + } +} +namespace bakaapi { + +void login() { + std::string response; + + char url[] = "https://c-for-dummies.com/curl_test.txt"; + + curl_easy_perform(curl); // Perform the request + + std::cout << "this is responce: " << response + << std::endl; // Output the result + + curl_easy_cleanup(curl); // Cleanup +} +} // namespace bakaapi \ No newline at end of file diff --git a/src/net.h b/src/net.h new file mode 100644 index 0000000..529e739 --- /dev/null +++ b/src/net.h @@ -0,0 +1,4 @@ +#include +namespace bakaapi { +void login(); +} \ No newline at end of file