diff --git a/src/server/slavefuncs.c b/src/server/slavefuncs.c --- a/src/server/slavefuncs.c +++ b/src/server/slavefuncs.c @@ -560,3 +560,89 @@ void slaveTest(){ } } + +/* simpleSlave functions */ + +/** Memory struct for curl */ +struct _web_memorystruct { + char *memory; + size_t size; +}; + +static void *_web_myrealloc(void *ptr, size_t size); + +static void *_web_myrealloc(void *ptr, size_t size) +{ + /* There might be a realloc() out there that doesn't like reallocing + NULL pointers, so we take care of it here */ + if(ptr) + return realloc(ptr, size); + else + return malloc(size); +} + +static size_t _web_writememorycallback(void *ptr, size_t size, size_t nmemb, void *data) +{ + size_t realsize = size * nmemb; + struct _web_memorystruct *mem = (struct _web_memorystruct *)data; + + mem->memory = _web_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 _web_memorystruct _web_getrequest(char *url){ + fprintf(stderr,"Preparing to get request at %s",url); + + CURL *curl; + CURLcode res; + struct _web_memorystruct chunk; + + chunk.memory=NULL; /* we expect realloc(NULL, size) to work */ + chunk.size = 0; /* no data at this point */ + + curl = curl_easy_init(); + if(curl) { + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _web_writememorycallback); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk); + curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0"); + + res = curl_easy_perform(curl); + curl_easy_cleanup(curl); + } + + /* we're done with libcurl, so clean it up */ + curl_global_cleanup(); + + return chunk; // 0 is OK, 1 is 404 or other error + +} + +void _web_finishframe(int slavekey, char *slavepass, int jobnum, int framenum){ + char *url; + _distren_asprintf(&url,"http://dev.distren.org/slave/act.php?mode=finishframe&slavekey=%d&slavepass=%s&jobnum=%d&framenum=%d", slavekey, slavepass, jobnum, framenum); + struct _web_memorystruct data = _web_getrequest(url); + + if(data.memory) + free(data.memory); +} + +void _web_startframe(int slavekey, char *slavepass, int jobnum, int framenum){ + + +} + +void _web_getwork(int slavekey, char *slavepass, int *jobnum, int *framenum){ + + +} + +void _web_setrenderpower(int slavekey, char *slavepass, int jobnum, int framenum){ + + +}