#include #include #include #include "curl/curl.h" #include "curl/types.h" #include "curl/easy.h" CURL *curl_handle; char *buffer; struct MemoryStruct { char *memory; size_t size; }; void *myrealloc(void *ptr, size_t size) { if (ptr) return realloc(ptr, size); else return malloc(size); } size_t WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) { size_t realsize = size * nmemb; struct MemoryStruct *mem = (struct MemoryStruct *)data; mem->memory = (char *)myrealloc(mem->memory, mem->size + realsize + 1); if (mem->memory) { memcpy(&(mem->memory[mem->size]), ptr, realsize); mem->size += realsize; mem->memory[mem->size] = 0; } return realsize; } struct MemoryStruct HTML; int cPROCESS(char *option, char *URL, char *REFERER, char *POSTDATA) { char res; if (option == "GET") { curl_easy_setopt(curl_handle, CURLOPT_URL, URL); curl_easy_setopt(curl_handle, CURLOPT_REFERER, REFERER); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &HTML); curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "Opera/9.00 (X11; Linux i686; U; en)"); res = curl_easy_perform(curl_handle); if (!res) return 1; memcpy(buffer, HTML.memory, sizeof(HTML.memory)); return 0; } else if (option == "POST") { curl_easy_setopt(curl_handle, CURLOPT_URL, URL); curl_easy_setopt(curl_handle, CURLOPT_REFERER, REFERER); curl_easy_setopt(curl_handle, CURLOPT_POST, 1); curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, POSTDATA); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&HTML); curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "Opera/9.00 (X11; Linux i686; U; en)"); res = curl_easy_perform(curl_handle); if (!res) return 1; memcpy(buffer, HTML.memory, sizeof(HTML.memory)); return 0; } else return 1; } void cCLEANUP(void) { curl_easy_cleanup(curl_handle); free(HTML.memory); HTML.size = 0; return; } void cINIT(void) { HTML.memory = 0; HTML.size = 0; curl_global_init(CURL_GLOBAL_ALL); curl_handle = curl_easy_init(); return; } char* cPASSDATA(void) { return buffer; // this is it }