/* WebDownloader for X-Window
* Copyright (C) 1999-2002 Koshelev Maxim
* This Program is free but not GPL!!! You can't modify it
* without agreement with author. You can't distribute modified
* program but you can distribute unmodified program.
*
* This program 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.
*/
#ifndef MY_SERVER_CLIENT
#define MY_SERVER_CLIENT
#include "mutex.h"
#include <string>
#include <list>
#include <vector>
#include "queue.h"
struct tDownload;
namespace d4x{
struct RemoteCommand{
int type;
std::vector<std::string> params;
};
};
class tMsgServer{
std::list<d4x::RemoteCommand> COMMANDS;
char *file;
d4x::Mutex lock;
pthread_t thread_id;
int fd,newfd; /* socket descriptors */
void cmd_add(int len,int type);
void cmd_ls(int len,int type);
void cmd_ack();
void cmd_return_int(int what);
void write_dwn_status(tDownload *dwn,int full=0);
void cmd_lstree();
void cmd_lstree_sub(tQueue *q);
public:
tMsgServer();
int init();
void run();
void run_thread();
void stop_thread();
d4x::RemoteCommand get_command();
bool empty();
~tMsgServer();
};
struct tPacketStatus{
int Status;
int Size;
int Download;
int Speed;
int Time;
int Attempt;
int MaxAttempt;
char *url;
tPacketStatus(){url=(char*)NULL;};
~tPacketStatus(){if (url) delete[] url;};
};
class tMsgClient{
int fd;
char *buf;
int bufsize;
public:
tMsgClient();
int init();
int send_command(int cmd,char *data,int len);
int send_command_short(int cmd,char *data,int len);
int get_answer_int();
int get_answer_status(tPacketStatus *status);
int readdata(void *buf,int len);
void done();
~tMsgClient();
};
struct tPacket{
int type;
int len;
};
enum {
PACKET_NOP=0, //nothing to do
PACKET_ACK, //just return ACK
PACKET_ADD,
PACKET_ASK_SPEED,
PACKET_ASK_RUN, // amount of downloads in RUN state
PACKET_ASK_STOP, // amount of downloads in FAIL state
PACKET_ASK_PAUSE, // amount of paused downloads
PACKET_ASK_COMPLETE, // amount of completed downloads
PACKET_ASK_READED_BYTES,
PACKET_SET_SPEED_LIMIT,
PACKET_SET_SAVE_PATH,
PACKET_DEL_COMPLETED,
PACKET_SET_MAX_THREADS,
PACKET_ICONIFY,
PACKET_POPUP,
PACKET_MSG,
PACKET_ADD_OPEN,
PACKET_ASK_FULLAMOUNT, // amount of all downloads
PACKET_RERUN_FAILED,
PACKET_EXIT_TIME,
PACKET_LS,
PACKET_DEL,
PACKET_STOP,
PACKET_LSTREE,
PACKET_SWITCH_QUEUE,
PACKET_REFERER,
PACKET_OPENLIST,
PACKET_UNKNOWN
};
enum {
LST_QUEUE,
LST_SUBQUEUE,
LST_UPQUEUE,
LST_DQUEUE
};
struct d4xDownloadQueue;
d4xDownloadQueue *d4x_get_queue_num(int N);
#endif
syntax highlighted by Code2HTML, v. 0.9.1