refactoring + signal handling

This commit is contained in:
PoliEcho 2024-11-09 12:23:07 +01:00
parent 2ed6176f38
commit bd1e8c5a36
10 changed files with 161 additions and 60 deletions

View File

@ -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

View File

@ -1,33 +0,0 @@
#include <curl/curl.h>
#include <string>
#include <iostream>
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
}
}
}

View File

@ -1,3 +0,0 @@
namespace bakaapi {
void login();
}

17
src/color.h Normal file
View File

@ -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 */

22
src/helper_funcs.cpp Normal file
View File

@ -0,0 +1,22 @@
#include <csignal>
#include <iostream>
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);
}

1
src/helper_funcs.h Normal file
View File

@ -0,0 +1 @@
void safe_exit(int code);

View File

@ -1,27 +1,63 @@
#include "main.h"
#include "color.h"
#include "helper_funcs.h"
#include "net.h"
#include <csignal>
#include <curl/curl.h>
#include <curses.h>
#include "baka-api.h"
#include <iostream>
#include <regex>
#include <string>
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;
}

5
src/main.h Normal file
View File

@ -0,0 +1,5 @@
#include <curl/curl.h>
#include <string>
extern CURL *curl;
extern std::string bakaapi_url;

49
src/net.cpp Normal file
View File

@ -0,0 +1,49 @@
#include "net.h"
#include "color.h"
#include "main.h"
#include <cstdlib>
#include <curl/curl.h>
#include <iostream>
#include <string>
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

4
src/net.h Normal file
View File

@ -0,0 +1,4 @@
#include <curl/curl.h>
namespace bakaapi {
void login();
}