/*
Copyright 2009 Nathan Phillip Brink, Ethan Zonca, Matthew Orlando
This file is a part of DistRen.
DistRen is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
DistRen is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with DistRen. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _DISTREN_SLAVEFUNCS_H
#define _DISTREN_SLAVEFUNCS_H
#include "distrenjob.h"
#include "common/remoteio.h"
#include <libxml/xpath.h>
#include <stdio.h>
struct msg;
int sendSignal(struct remoteio *rem, char signal);
int sendExtSignal(struct remoteio *rem, char signal, char *data);
xmlNodePtr xml_quickxpath(xmlXPathContextPtr xpathctxt, xmlChar *path);
int software_updatecheck();
int delete_jobdata(int jobnum, char *datadir);
size_t curl_writetodisk(void *ptr, size_t size, size_t nmemb, FILE *stream);
int curlget(char *url, char *out);
int curlpost(char *filename, char *url, int jobnum, int framenum, int slavekey);
int ssh_keygen();
int register_user(char *username, char *email);
int login_user(char *username);
int conf_replace(char *conffile, char *wordtoreplace, char *replacewith);
int exec_blender(char *input, char *output, int frame);
void xmlinit();
void xmlcleanup();
int distren_mkdir_recurse(char *dirname);
int job_build_path(char *filename, unsigned int jobnum);
int downloadTar(char *url, char *destinationPath);
int uploadOutput(char *pathtoOutput, char *urltoOutput, int jobnum, int framenum, int slavekey);
int unpackJob(char *outdir, char *pathtoTar);
void prepareJobPaths(int jobnum, int framenum, char *outputExt, char *datadir, char **urltoTar,char **pathtoTar,char **pathtoTardir,char **pathtoJob, char **pathtoJobfile,char **urltoJobfile,char **urltoOutput,char **pathtoOutput, char **pathtoRenderOutput, char **pathtoOutdir);
int checkUsername(char *username);
void slaveTest();
/* Simple slave */
struct _web_memorystruct;
static void *_web_myrealloc(void *ptr, size_t size);
static size_t _web_writememorycallback(void *ptr, size_t size, size_t nmemb, void *data);
struct _web_memorystruct _web_getrequest(char *url);
void _web_finishframe(int slavekey, char *slavepass, int jobnum, int framenum);
void _web_startframe(int slavekey, char *slavepass, int jobnum, int framenum);
void _web_resetframe(int slavekey, char *slavepass, int jobnum, int framenum);
int _web_getwork(int slavekey, char *slavepass, int *jobnum, int *framenum);
void _web_setrenderpower(int slavekey, char *slavepass, int jobnum, int framenum);
#endif