diff options
Diffstat (limited to 'lib')
-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 |
7 files changed, 74 insertions, 16 deletions
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; |