diff options
-rw-r--r-- | include/HttpServ.h | 2 | ||||
-rw-r--r-- | include/Input.h | 11 | ||||
-rw-r--r-- | include/Makefile.am | 4 | ||||
-rw-r--r-- | include/Output.h | 21 | ||||
-rw-r--r-- | include/String.h | 4 | ||||
-rw-r--r-- | include/Task.h | 3 | ||||
-rw-r--r-- | include/TaskMan.h | 13 | ||||
-rw-r--r-- | lib/Handle.cc | 2 | ||||
-rw-r--r-- | lib/HttpServ.cc | 19 | ||||
-rw-r--r-- | lib/Input.cc | 15 | ||||
-rw-r--r-- | lib/Output.cc | 30 | ||||
-rw-r--r-- | lib/String.cc | 4 | ||||
-rw-r--r-- | lib/Task.cc | 12 | ||||
-rw-r--r-- | lib/TaskMan.cc | 8 |
14 files changed, 119 insertions, 29 deletions
diff --git a/include/HttpServ.h b/include/HttpServ.h index 5074639..7ac40e2 100644 --- a/include/HttpServ.h +++ b/include/HttpServ.h @@ -18,7 +18,7 @@ class HttpServ : public Base { public: - HttpServ(int = 1500, const String & = String("GruiK Server v0.1")); + HttpServ(int = 1500, const String & = String("GruiK Server v0.1")) throw (GeneralException); ~HttpServ() {} void MainLoop(Action *); private: diff --git a/include/Input.h b/include/Input.h index f9a3df5..682cee1 100644 --- a/include/Input.h +++ b/include/Input.h @@ -20,6 +20,17 @@ class Input : public Handle { String n; }; +class Stdin_t : public Handle { + public: + Stdin_t(); + virtual ~Stdin_t() {} + virtual bool CanWrite(); + virtual bool CanRead(); + virtual String GetName(); +}; + +extern Stdin_t Stdin; + #else #error This only works with a C++ compiler #endif diff --git a/include/Makefile.am b/include/Makefile.am index ac1f63c..bc93b8d 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,5 +1,5 @@ -includedir = $(prefix)/include/@PACKAGE@ -include_HEADERS = \ +#includedir = $(prefix)/include/@PACKAGE@ +pkginclude_HEADERS = \ Exceptions.h Handle.h String.h Output.h Socket.h HttpServ.h Variables.h Menu.h \ Action.h Message.h Form.h Confirm.h Table.h IRC.h Task.h Buffer.h General.h \ CopyJob.h ReadJob.h Regex.h TaskMan.h diff --git a/include/Output.h b/include/Output.h index ef76012..4e1e092 100644 --- a/include/Output.h +++ b/include/Output.h @@ -20,6 +20,27 @@ class Output : public Handle { String n; }; +class Stdout_t : public Handle { + public: + Stdout_t(); + virtual ~Stdout_t() {} + virtual bool CanWrite(); + virtual bool CanRead(); + virtual String GetName(); +}; + +class Stderr_t : public Handle { + public: + Stderr_t(); + virtual ~Stderr_t() {} + virtual bool CanWrite(); + virtual bool CanRead(); + virtual String GetName(); +}; + +extern Stdout_t Stdout; +extern Stderr_t Stderr; + #else #error This only works with a C++ compiler #endif diff --git a/include/String.h b/include/String.h index c6afdb2..ddb0cde 100644 --- a/include/String.h +++ b/include/String.h @@ -47,8 +47,8 @@ class String : public Base { String(int); String(double); ~String(); - char * set(char *, ...); - char * to_charp(size_t = 0, ssize_t = -1) const; + const char * set(char *, ...); + const char * to_charp(size_t = 0, ssize_t = -1) const; String extract(size_t = 0, ssize_t = -1) const; char * strdup(size_t = 0, ssize_t = -1) const; int to_int() const; diff --git a/include/Task.h b/include/Task.h index 675b2ed..f2d4b0b 100644 --- a/include/Task.h +++ b/include/Task.h @@ -3,6 +3,7 @@ #ifdef __cplusplus #include <unistd.h> +#include <sys/time.h> #include <vector.h> #include <Exceptions.h> #include <Handle.h> @@ -31,7 +32,7 @@ class Task : public Base { vector<Handle *> w4ha; vector<Task *> w4ta; vector<pid_t> w4pr; - vector<struct timeval> w4to; + vector<timeval> w4to; }; #else diff --git a/include/TaskMan.h b/include/TaskMan.h index dc8c913..16bc0ee 100644 --- a/include/TaskMan.h +++ b/include/TaskMan.h @@ -7,14 +7,13 @@ class TaskMan : public Base { public: - TaskMan() throw (GeneralException); - int AddTask(Task *); - int TaskMan::RemoveTask(Task *); - void Init() throw (GeneralException); - void MainLoop() throw (GeneralException); + static int AddTask(Task *); + static int RemoveTask(Task *); + static void Init() throw (GeneralException); + static void MainLoop() throw (GeneralException); private: - vector<Task *> TaskList; - int number; + static vector<Task *> TaskList; + static int number; static bool inited; }; diff --git a/lib/Handle.cc b/lib/Handle.cc index 7ad7cc6..dd22b5c 100644 --- a/lib/Handle.cc +++ b/lib/Handle.cc @@ -96,7 +96,7 @@ void Handle::SetNonBlock(void) { } Handle & operator<<(Handle & h, const String & s) { - char * p; + const char * p; p = s.to_charp(); h.write(p, strlen(p)); diff --git a/lib/HttpServ.cc b/lib/HttpServ.cc index 84078e0..3bec28f 100644 --- a/lib/HttpServ.cc +++ b/lib/HttpServ.cc @@ -7,9 +7,18 @@ String endhl = "\r\n", endnl = "\n"; -HttpServ::HttpServ(int port, const String & nname) : name(nname), localport(port) { - Listener.SetLocal("", port); - Listener.Listen(); +HttpServ::HttpServ(int port, const String & nname) throw (GeneralException) : name(nname), localport(port) { + bool r = true; + + r = Listener.SetLocal("", port); + if (r) { + r = Listener.Listen(); + } + + if (!r) { + throw GeneralException("Initialisation of the Mini HTTP-Server failed."); + } + cerr << "Mini HTTP-Server '" << name << "' ready and listening for port " << port << endl; } @@ -128,7 +137,7 @@ void HttpServ::ParseVars(Handle * s, int len) { s->read(&l, 1); t += l; } - cerr << "Post variables line: '" <<t << "'\n"; + cerr << "Post variables line: '" << t << "'\n"; // Les variables sont sous la forme 'var1=val1&var2=val2&val3=var3'. Donc le nombre d'occurences @@ -180,7 +189,7 @@ void HttpServ::ParseVars(Handle * s, int len) { bool HttpServ::ParseUri(String & file, String & domain, Handle * s) { String t, Uri; bool post = false; - char * p = NULL; + const char * p = NULL; ssize_t sppos; *s >> t; diff --git a/lib/Input.cc b/lib/Input.cc index 9ce7ca0..ad8991a 100644 --- a/lib/Input.cc +++ b/lib/Input.cc @@ -30,3 +30,18 @@ String Input::GetName() { return n; } +Stdin_t::Stdin_t() : Handle(dup(0)) { } + +bool Stdin_t::CanWrite() { + return 0; +} + +bool Stdin_t::CanRead() { + return 1; +} + +String Stdin_t::GetName() { + return "Stdin"; +} + +Stdin_t Stdin; diff --git a/lib/Output.cc b/lib/Output.cc index ab51c9f..9e7437f 100644 --- a/lib/Output.cc +++ b/lib/Output.cc @@ -30,3 +30,33 @@ String Output::GetName() { return n; } +Stdout_t::Stdout_t() : Handle(dup(1)) {} + +bool Stdout_t::CanWrite() { + return 1; +} + +bool Stdout_t::CanRead() { + return 0; +} + +String Stdout_t::GetName() { + return "Stdout"; +} + +Stderr_t::Stderr_t() : Handle(dup(2)) {} + +bool Stderr_t::CanWrite() { + return 1; +} + +bool Stderr_t::CanRead() { + return 0; +} + +String Stderr_t::GetName() { + return "Stderr"; +} + +Stdout_t Stdout; +Stderr_t Stderr; diff --git a/lib/String.cc b/lib/String.cc index 0e22de0..d64f065 100644 --- a/lib/String.cc +++ b/lib/String.cc @@ -47,7 +47,7 @@ String::~String() { free(str); } -char * String::set(char * s, ...) { +const char * String::set(char * s, ...) { va_list ap; va_start(ap, s); @@ -59,7 +59,7 @@ char * String::set(char * s, ...) { return t; } -char * String::to_charp(size_t from, ssize_t to) const { +const char * String::to_charp(size_t from, ssize_t to) const { if (to < 0) { strcpy(t, &(str[from])); } else { diff --git a/lib/Task.cc b/lib/Task.cc index 338eaba..fd1bf3f 100644 --- a/lib/Task.cc +++ b/lib/Task.cc @@ -1,9 +1,15 @@ +#include <sys/time.h> #include <iostream.h> +#include "TaskMan.h" #include "Task.h" #include "String.h" -Task::Task() : state(TASK_ON_HOLD), suspended(false) {} -Task::~Task() {} +Task::Task() : state(TASK_ON_HOLD), suspended(false) { + TaskMan::AddTask(this); +} +Task::~Task() { + TaskMan::RemoveTask(this); +} int Task::Do() throw (GeneralException) { return TASK_ON_HOLD; @@ -55,6 +61,6 @@ void Task::WaitFor(pid_t p) { w4pr.push_back(p); } -void Task::WaitFor(struct timeval t) { +void Task::WaitFor(timeval t) { w4to.push_back(t); } diff --git a/lib/TaskMan.cc b/lib/TaskMan.cc index 6a38491..479e25e 100644 --- a/lib/TaskMan.cc +++ b/lib/TaskMan.cc @@ -3,6 +3,8 @@ #include <vector.h> #include "TaskMan.h" +vector<Task *> TaskMan::TaskList; +int TaskMan::number = 0; bool TaskMan::inited = false; static int got_sigchild = 0; @@ -16,10 +18,6 @@ void taskman_sigchild(int sig) { nbprocess++; } -TaskMan::TaskMan() throw (GeneralException) { - throw GeneralException("You can't instanciate a Task Manager."); -} - void TaskMan::Init() throw (GeneralException) { if (inited) { throw GeneralException("Task Manager already initialised."); @@ -69,7 +67,7 @@ void TaskMan::MainLoop() throw (GeneralException) { #endif try { - t->Do(); + t->Run(); } catch (TaskSwitch) { continue; |