diff --git a/src/server/slavefuncs.c b/src/server/slavefuncs.c --- a/src/server/slavefuncs.c +++ b/src/server/slavefuncs.c @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -48,6 +49,11 @@ #define DEBUG 0 +void stringToUpper(char *string){ + while(*string != '\0') { + *string = toupper((unsigned char)*string); + } +} /** Grabs the xml DOM node reached by an XPath. @@ -258,14 +264,23 @@ return 1; // Success /* Executors */ /** Executor function for Blender operations */ -int exec_blender(char *input, char *output, int frame) +int exec_blender(char *input, char *output, char *outputExt, int xres, int yres, int frame) { int ret; + + stringToUpper(outputExt); + char *frame_str; _distren_asprintf(&frame_str, "%i", frame); + char *xres_str; + _distren_asprintf(&xres_str, "%i", xres); + + char *yres_str; + _distren_asprintf(&yres_str, "%i", yres); + char *command = "blender"; // @TODO: We currently expect this to be in PATH - char *cmd[] = { command, "-b", input, "-o", output, "-f", frame_str, "-t", "0", (char *)NULL }; // arguments for blender + char *cmd[] = { command, "-b", input, "-o", output, "-F", outputExt, "-f", frame_str, "-t", "0", (char *)NULL }; // arguments for blender if(DEBUG) fprintf(stderr,"Preparing to execute command: %s -b %s -o %s -f %s\n", command, input, output, frame_str); @@ -649,7 +664,8 @@ void _web_startframe(int slavekey, char free(data.memory); } -int _web_getwork(int slavekey, char *slavepass, int *jobnum, int *framenum){ +/** @TODO: Needs to get xres, yres, outpuext */ +int _web_getwork(int slavekey, char *slavepass, int *jobnum, int *framenum, int *xres, int *yres, char *outputext){ char *url; _distren_asprintf(&url,"http://distren.org/slave/act.php?mode=getwork&slavekey=%d&slavepass=%s", slavekey, slavepass); struct _web_memorystruct data = _web_getrequest(url); @@ -660,12 +676,12 @@ int _web_getwork(int slavekey, char *sla return 0; } else if(!strcmp(data.memory, "ERROR_BADKEY")){ - fprintf(stderr,"*** Slave %d does not exist!\n",slavekey); + fprintf(stderr,"*** Slave %d does not exist! Check your slave ID, or register your slave on distren.org\n",slavekey); free(data.memory); return 0; } else if(!strcmp(data.memory, "ERROR_NORENDERPOWER")){ - fprintf(stderr,"*** Render power not set! Please invoke distrensimpleslave -r to run the benchmark!\n",slavekey); + fprintf(stderr,"*** Render power not set! Please invoke distrensimpleslave -r to run the benchmark!\n"); free(data.memory); return 0; } @@ -675,17 +691,36 @@ int _web_getwork(int slavekey, char *sla char *serverversion; tmp = strtok (data.memory,",,"); - if(tmp != NULL){ // make sure work is available - *jobnum = atoi(tmp); + if(tmp != NULL) { // make sure work is available + *jobnum = atoi(tmp); // Grab jobnum + tmp = strtok (NULL, ","); if(tmp == NULL) return 0; // no work - *framenum = atoi(tmp); + *framenum = atoi(tmp); // Grab framenum + tmp = strtok (NULL, ","); if(tmp == NULL) return 0; // no work serverversion = tmp; + tmp = strtok (NULL, ","); + if(tmp == NULL) + return 0; // no work + *xres = atoi(tmp); + + tmp = strtok (NULL, ","); + if(tmp == NULL) + return 0; // no work + *yres = atoi(tmp); + + tmp = strtok (NULL, ","); + if(tmp == NULL) + return 0; // no work + outputext = tmp; + + // @FIXME: Setting outputext and serverversion = temp; will this cause issues as these are pointers to parts of the original temp var? + // @TODO: This should be called every time, not just on fail. if(strcmp(PACKAGE_VERSION,serverversion)){ fprintf(stderr,"Your distren package is out of date! Please acquire a newer version. (%s local vs %s remote)\n", PACKAGE_VERSION, serverversion);