Skip to content
daemon.hh 2.22 KiB
Newer Older
#ifndef DAEMON_HH
# define DAEMON_HH
Seblu's avatar
Seblu committed

typedef std::string string;
typedef std::stringstream sstream;
typedef std::ostream ostream;
typedef std::ifstream ifstream;

// -----------------------------------------------------------------------------
// SLDAEMON CLASS
// -----------------------------------------------------------------------------

class SLDaemon
{
public:

  static const string version;
  static SLDaemon &Instance();
Seblu's avatar
Seblu committed

  struct Options {
    Options();
    void print();
Seblu's avatar
Seblu committed
    string server;
Seblu's avatar
Seblu committed
    int port;
Seblu's avatar
Seblu committed
    string login;
Seblu's avatar
Seblu committed
    string pass;
    int verbose; //0=false, 1=true, 3=undef
    string scriptdir;
    string conffile;
  };

  struct Job {
    Job() {}
Seblu's avatar
Seblu committed
    Job(int, const string &, time_t);
    int pid;
    string name;
    time_t start_time;
    bool operator()(const Job &a, const Job &b);
  };

Seblu's avatar
Seblu committed
  inline bool verbose() const { return options_.verbose == 1; }

  Options *getoptions(int argc, char *argv[]) const;
  Options *getoptions(const string file) const;
  void applyoptions(const Options *opt);
Seblu's avatar
Seblu committed
  void run();
Seblu's avatar
Seblu committed
  // friends functions

  friend void sigchild(int);

Seblu's avatar
Seblu committed
protected:
  // parsed options
  Options options_;
Seblu's avatar
Seblu committed

  // current socket
Seblu's avatar
Seblu committed
  int socket_fd_;
  FILE* socket_fs_;
Seblu's avatar
Seblu committed

Seblu's avatar
Seblu committed
  // pid list
  typedef std::set<Job, Job> t_job;
  t_job jobs_;
Seblu's avatar
Seblu committed

Seblu's avatar
Seblu committed
  // Options functions
Seblu's avatar
Seblu committed
  void usage(const char *argv0) const;
  void check_options() const;
Seblu's avatar
Seblu committed

  // network functions
Seblu's avatar
Seblu committed
  void connect();
  void disconnect();
Seblu's avatar
Seblu committed
  void send(const char *data, size_t len, bool buf = true);
  void send(const string str, bool buf = true);
  void send(long int i);
  void sendln(const string &s);
Seblu's avatar
Seblu committed
  char *recv(size_t size);
Seblu's avatar
Seblu committed
  void recv(size_t size, const string &filename);
Seblu's avatar
Seblu committed
  char *recvln();
  void flush();
Seblu's avatar
Seblu committed
  // protocol functions
Seblu's avatar
Seblu committed
  void auth();
Seblu's avatar
Seblu committed
  // commmand functions
Seblu's avatar
Seblu committed
  void cmd_exit();
Seblu's avatar
Seblu committed
  void cmd_version();
  void cmd_list();
  void cmd_status();
  void cmd_killall();
  void cmd_kill(const char *line);
  void cmd_exec(const char *line);
Seblu's avatar
Seblu committed
  void cmd_update();
Seblu's avatar
Seblu committed
  void cmd_file(const char *line);
Seblu's avatar
Seblu committed

  // others functions
Seblu's avatar
Seblu committed
  string md5(const string &file) const;
private:
  static SLDaemon *instance_;

  SLDaemon();
  ~SLDaemon() {}
  SLDaemon(const SLDaemon &) { assert(true); }
  SLDaemon &operator=(const SLDaemon &) { assert(true); return *instance_; }
Seblu's avatar
Seblu committed
};

#endif