Skip to content
sld.hh 2.28 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 "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
// -----------------------------------------------------------------------------

const string VERSION = "1";
Seblu's avatar
Seblu committed
const int MAX_LINE_SIZE = 512;
Seblu's avatar
Seblu committed

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

class SLDaemon
{
public:

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

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;
  };

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

Seblu's avatar
Seblu committed
  options *getoptions(int argc, char *argv[]) const;
  options *getoptions(const string file) const;
  void applyoptions(const options *opt);
  void run();
protected:
  // parsed options
  options options_;

  // 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
  std::set<int> jobs;

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);
  char *recv(size_t size);
  void recv(size_t size, const string filename);
  char *recvln();
  void flush();
  
  // protocol functions
Seblu's avatar
Seblu committed
  void auth();
Seblu's avatar
Seblu committed
  void tee(const string msg);
  void proto_ok();
  void proto_ko();
  void proto_violation();
  
  // commmand functions
Seblu's avatar
Seblu committed
  void cmd_exit();
Seblu's avatar
Seblu committed
  void cmd_version();
  void cmd_clean();
  void cmd_list();
  void cmd_reload();
  void cmd_update(const char *line);
Seblu's avatar
Seblu committed
  void cmd_exec(const char *line);
  void cmd_file(const char *line);
Seblu's avatar
Seblu committed

  // others functions
  string md5(const string file) const;
Seblu's avatar
Seblu committed
};

#endif