1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#ifndef _CON_H
#define _CON_H
#include "config.h"
#include "lockable.h"
#include <list>
#include <string>
#define RBUFLEN 16384
namespace acng
{
class dlcon;
class job;
class header;
class con;
typedef SHARED_PTR<con> tConPtr;
class con // : public tRunable
{
public:
con(int fdId, const char *client);
virtual ~con();
void WorkLoop();
private:
con& operator=(const con&);// { /* ASSERT(!"Don't copy con objects"); */ };
con(const con&);// { /* ASSERT(!"Don't copy con objects"); */ };
//! Terminate the connection descriptors gracefully
void ShutDown();
int m_confd;
std::list<job*> m_jobs2send;
#ifdef KILLABLE
// to awake select with dummy data
int wakepipe[2];
#endif
bool m_bStopActivity;
pthread_t m_dlerthr;
// for jobs
friend class job;
bool SetupDownloader(const char *xff);
dlcon * m_pDlClient;
mstring m_sClientHost;
header *m_pTmpHead;
// some accounting
mstring logFile, logClient;
off_t fileTransferIn = 0, fileTransferOut = 0;
bool m_bLogAsError = false;
void writeAnotherLogRecord(const mstring &pNewFile, const mstring &pNewClient);
// This method collects the logged data counts for certain file.
// Since the user might restart the transfer again and again, the counts are accumulated (for each file path)
void LogDataCounts(cmstring & file, const char *xff, off_t countIn, off_t countOut,
bool bAsError);
#ifdef DEBUG
unsigned m_nProcessedJobs;
#endif
};
}
#endif
|