Skip to content
sld.hh 3.12 KiB
Newer Older
Seblu's avatar
Seblu committed

#ifndef SLD_HH
# define SLD_HH

# include <cassert>
# include <ios>
# include <iostream>
# include <fstream>
# include <sstream>
# include <map>
# include <time.h>
# include <set>
Seblu's avatar
Seblu committed

# include "error.hh"

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

enum {
Seblu's avatar
Seblu committed
  ERR_OK = 0,
  ERR_USAGE = 1,
  ERR_BADPARAM = 2,
  ERR_FILE = 3,
  ERR_NET = 4,
  ERR_PROTO = 5,
  ERR_AUTH = 6,
  ERR_NOMEM = 41,
  ERR_UNKNOWN = 42
  
Seblu's avatar
Seblu committed
};

// -----------------------------------------------------------------------------
// Gonstant
// -----------------------------------------------------------------------------

Seblu's avatar
Seblu committed
static const string VERSION = "1";
static const int MAX_LINE_SIZE = 512;
static const string RCV_DATA = "<< ";
static const string SND_DATA = ">> ";
Seblu's avatar
Seblu committed

Seblu's avatar
Seblu committed
extern string binpath;
string getbinpath(const char *argv0);

void sigchild(int);

Seblu's avatar
Seblu committed
// -----------------------------------------------------------------------------
// SLDAEMON CLASS
// -----------------------------------------------------------------------------

class SLDaemon
{
public:

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

  struct Options {
    Options();
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();
Seblu's avatar
Seblu committed
  void disconnect();  
  void send(const char *data, size_t len, bool buf = true);
  void send(const string str, bool buf = true);
  void send(long int i);
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();
  
  // protocol functions
Seblu's avatar
Seblu committed
  void auth();
Seblu's avatar
Seblu committed
  void answer(const string &, bool = true);
  void answer(long int, bool = true);
  void warn(const string &, const string & = "");
  void warn(long int, const string & = "");
Seblu's avatar
Seblu committed
  void proto_violation();
  
  // commmand functions
Seblu's avatar
Seblu committed
  void cmd_exit();
Seblu's avatar
Seblu committed
  void cmd_version();
  void cmd_list();
  void cmd_reload();
  void cmd_status();
  void cmd_killall();
  void cmd_kill(const char *line);
  void cmd_job(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
};

Seblu's avatar
Seblu committed
#endif