initial import
This commit is contained in:
@@ -0,0 +1,190 @@
|
||||
/************************************************************************
|
||||
* $Id: globalfunctions.cpp 661 2011-04-05 13:16:53Z elzubeir $
|
||||
*
|
||||
* ------------
|
||||
* Description:
|
||||
* ------------
|
||||
*
|
||||
* (C) Copyright 2009-2011 ALLCONTENT. All rights reserved.
|
||||
*
|
||||
* -----------------
|
||||
* Revision Details: (Updated by Revision Control System)
|
||||
* -----------------
|
||||
* $Date: 2011-04-05 17:16:53 +0400 (Tue, 05 Apr 2011) $
|
||||
* $Author: elzubeir $
|
||||
* $Revision: 661 $
|
||||
* $HeadURL: file:///opt/svn/socialhose/trunk/app/ClippingStation/globalfunctions.cpp $
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
|
||||
|
||||
#include "globalfunctions.h"
|
||||
|
||||
int g_currentUpload = 0;
|
||||
|
||||
ofstream g_logfile;
|
||||
|
||||
bool g_debug = false;
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
//parse headers for Content-Length
|
||||
size_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb, void *stream) {
|
||||
int r;
|
||||
long len = 0;
|
||||
|
||||
r = sscanf((const char*)ptr, "Content-Length: %ld\n", &len);
|
||||
if (r)
|
||||
*((long *) stream) = len;
|
||||
|
||||
return size * nmemb;
|
||||
}
|
||||
|
||||
// discard downloaded data
|
||||
size_t discardfunc(void *ptr, size_t size, size_t nmemb, void *stream) {
|
||||
return size * nmemb;
|
||||
}
|
||||
*/
|
||||
|
||||
// read data to upload
|
||||
size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)
|
||||
{
|
||||
FILE *f = (FILE*)stream; //convert the stream fo file
|
||||
size_t n;
|
||||
|
||||
if (ferror(f))
|
||||
return CURL_READFUNC_ABORT;
|
||||
|
||||
n = fread(ptr, size, nmemb, f) * size; //read bytes from the stream
|
||||
g_currentUpload += n; //increase the uploaded data by n
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
int upload(CURL *curlhandle, const char * remotepath, const char * localpath,
|
||||
long timeout, long tries, char * errorstr)
|
||||
{
|
||||
FILE *f;
|
||||
CURLcode r = CURLE_GOT_NOTHING;
|
||||
int c;
|
||||
|
||||
f = fopen(localpath, "rb");
|
||||
if (f == NULL) {
|
||||
perror(NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
curl_easy_setopt(curlhandle, CURLOPT_UPLOAD, 1L); //set the operation to upload
|
||||
|
||||
curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath); //set the file to remote path
|
||||
|
||||
if (timeout)
|
||||
curl_easy_setopt(curlhandle, CURLOPT_FTP_RESPONSE_TIMEOUT, timeout); //set timeout if timeout flag is set
|
||||
|
||||
curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc); //this is the read functino that would read that data from f, as passed in the next line
|
||||
curl_easy_setopt(curlhandle, CURLOPT_READDATA, f); //where to read the data to upload from
|
||||
|
||||
curl_easy_setopt(curlhandle, CURLOPT_FTPPORT, "-"); // disable passive mode
|
||||
curl_easy_setopt(curlhandle, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L); //create any missing directories if they do not exist
|
||||
//curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 1L);
|
||||
|
||||
curl_easy_setopt(curlhandle, CURLOPT_NOPROGRESS, 0L); //no progress present
|
||||
//curl_easy_setopt(curlhandle, CURLOPT_PROGRESSFUNCTION, my_progress_func);
|
||||
|
||||
for (c = 0; (r != CURLE_OK) && (c < tries); c++) //try to upload mutilple times if tries > 0
|
||||
{
|
||||
curl_easy_setopt(curlhandle, CURLOPT_APPEND, 0L); //this is the first time to uplaod the file
|
||||
r = curl_easy_perform(curlhandle); //do the acutal upload
|
||||
}
|
||||
|
||||
fclose(f); //close the file
|
||||
|
||||
if ( CURLE_OK == r ) //if operation is successfull, return 1
|
||||
return 1;
|
||||
else
|
||||
{ //otherwise, set the error string, and reutrn 0
|
||||
strcpy(errorstr, curl_easy_strerror(r));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
size_t writefunc(void *buffer, size_t size, size_t nmemb, void *stream)
|
||||
{
|
||||
struct FtpFile *out=(struct FtpFile *)stream;
|
||||
|
||||
if(out && !out->stream)
|
||||
{
|
||||
/* open file for writing */
|
||||
out->stream=fopen(out->filename, "wb");
|
||||
|
||||
if(!out->stream)
|
||||
return -1; /* failure, can't open file to write */
|
||||
}
|
||||
|
||||
return fwrite(buffer, size, nmemb, out->stream);
|
||||
}
|
||||
|
||||
|
||||
int download(CURL* curlhandle, const char * remotepath, const char * localpath,
|
||||
long timeout, long tries, char * strerror)
|
||||
{
|
||||
FtpFile ftpfile=
|
||||
{
|
||||
localpath, // name to store the file as if succesful
|
||||
NULL
|
||||
};
|
||||
|
||||
CURLcode res = CURLE_GOT_NOTHING;
|
||||
|
||||
curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath);
|
||||
curl_easy_setopt(curlhandle, CURLOPT_WRITEFUNCTION, writefunc); // Define our callback to get called when there's data to be written
|
||||
curl_easy_setopt(curlhandle, CURLOPT_WRITEDATA, &ftpfile); // Set a pointer to our struct to pass to the callback
|
||||
|
||||
|
||||
curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 1L); // Switch on full protocol/debug output
|
||||
|
||||
res = curl_easy_perform(curlhandle);
|
||||
|
||||
if(CURLE_OK != res)
|
||||
{
|
||||
/* we failed */
|
||||
strcpy(strerror, curl_easy_strerror(res));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(ftpfile.stream)
|
||||
fclose(ftpfile.stream); /* close the local file */
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void MyOutputHandler(QtMsgType type, const char *msg) {
|
||||
if(!g_debug)
|
||||
return;
|
||||
|
||||
switch (type) {
|
||||
case QtDebugMsg:
|
||||
g_logfile << QTime::currentTime().toString().toAscii().data() << " Debug: \t" << msg << "\n";
|
||||
break;
|
||||
case QtCriticalMsg:
|
||||
g_logfile << QTime::currentTime().toString().toAscii().data() << " Critical: \t" << msg << "\n";
|
||||
break;
|
||||
case QtWarningMsg:
|
||||
//g_logfile << QTime::currentTime().toString().toAscii().data() << " Warning: \t" << msg << "\n";
|
||||
break;
|
||||
case QtFatalMsg:
|
||||
g_logfile << QTime::currentTime().toString().toAscii().data() << " Fatal: \t" << msg << "\n";
|
||||
abort();
|
||||
}
|
||||
|
||||
g_logfile.flush();
|
||||
}
|
||||
Reference in New Issue
Block a user