summaryrefslogtreecommitdiff
path: root/lib/HttpServ.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/HttpServ.cc')
-rw-r--r--lib/HttpServ.cc43
1 files changed, 22 insertions, 21 deletions
diff --git a/lib/HttpServ.cc b/lib/HttpServ.cc
index 69dff1e..9ec6ba3 100644
--- a/lib/HttpServ.cc
+++ b/lib/HttpServ.cc
@@ -22,11 +22,12 @@ void HttpServ::MainLoop(Action * p) {
void HttpServ::ProcessRequest(Action * p, Socket s) {
String file, domain, t;
Buffer b;
- ReadJob c(s, b);
+ Task * c = new ReadJob(&s, &b);
Action * f;
int len;
- c.Do();
+ c->Run();
+ delete c;
bad = false;
@@ -34,7 +35,7 @@ void HttpServ::ProcessRequest(Action * p, Socket s) {
cerr << "Got a request\n----\n";
- bool post = ParseUri(file, domain, b);
+ bool post = ParseUri(file, domain, &b);
len = -1;
do {
@@ -45,7 +46,7 @@ void HttpServ::ProcessRequest(Action * p, Socket s) {
len = t.extract(16).to_int();
}
} while (t.strlen());
-
+
if (post) {
// On a pas eu de ligne 'Content-Length' mais on a eu une méthode POST.
// Cela est une erreur.
@@ -55,7 +56,7 @@ void HttpServ::ProcessRequest(Action * p, Socket s) {
} else {
cerr << "Got a POST request. Parsing variables. (len = " << len << ")\n";
// Les variables seront initialisées ici.
- ParseVars(s, len);
+ ParseVars(&s, len);
}
} else {
Vars = new Variables(0);
@@ -78,19 +79,19 @@ void HttpServ::ProcessRequest(Action * p, Socket s) {
}
if (bad) {
- ShowError(s);
+ ShowError(&s);
} else {
if (((domain == "") || (domain == "/")) && (file == "")) {
// Si le navigateur a demandé l'URL '/', alors on renvoie une notification
// de redirection.
- SendRedirect(s);
+ SendRedirect(&s);
} else if (domain == "/bin") {
// Le domaine 'bin' est réservé aux actions. On cherche donc l'action à effectuer.
if ((f = p->Look4URL(file))) {
- SendHeads(s, "text/html");
+ SendHeads(&s, "text/html");
f->Do(Vars, &s);
} else {
- ShowError(s);
+ ShowError(&s);
}
} else {
// Dans tous les autres cas de domaine, on cherche le fichier dans le répertoire datas.
@@ -98,12 +99,12 @@ void HttpServ::ProcessRequest(Action * p, Socket s) {
// d'input renvoie une erreur.
try {
Input i(String("datas/") + file);
- SendHeads(s, GetMime(file));
+ SendHeads(&s, GetMime(file));
s.ReadFile(i);
cerr << "File found, dumped.\n";
}
catch (IOGeneral e) {
- ShowError(s);
+ ShowError(&s);
cerr << "File not found, error showed.\n";
}
}
@@ -114,7 +115,7 @@ void HttpServ::ProcessRequest(Action * p, Socket s) {
cerr << "----\n";
}
-void HttpServ::ParseVars(Handle & s, int len) {
+void HttpServ::ParseVars(Handle * s, int len) {
String t, v;
char conv[3], l;
int hconv, nbvars;
@@ -122,7 +123,7 @@ void HttpServ::ParseVars(Handle & s, int len) {
t = "";
for (int i = 0; i < len; i++) {
- s.read(&l, 1);
+ s->read(&l, 1);
t += l;
}
cerr << "Post variables line: '" <<t << "'\n";
@@ -174,13 +175,13 @@ void HttpServ::ParseVars(Handle & s, int len) {
* c'est à dire la méthode demandée par le client.
*/
-bool HttpServ::ParseUri(String & file, String & domain, Handle & s) {
+bool HttpServ::ParseUri(String & file, String & domain, Handle * s) {
String t, Uri;
bool post = false;
char * p = NULL;
ssize_t sppos;
- s >> t;
+ *s >> t;
cerr << t << endl;
bad = false;
@@ -233,8 +234,8 @@ bool HttpServ::ParseUri(String & file, String & domain, Handle & s) {
/*
* Ceci sert à rediriger le navigateur vers l'url de démarrage.
*/
-void HttpServ::SendRedirect(Handle & s) {
- s << "HTTP/1.1 301 Moved Permanently" << endhl <<
+void HttpServ::SendRedirect(Handle * s) {
+ *s << "HTTP/1.1 301 Moved Permanently" << endhl <<
"Server: " << name << endhl <<
"Location: http://127.0.0.1:" << localport << "/bin/start" << endhl <<
"Cache-Control: no-cache" << endhl <<
@@ -250,8 +251,8 @@ void HttpServ::SendRedirect(Handle & s) {
* Nous envoyons les entetes de réponse HTTP.
*/
-void HttpServ::SendHeads(Handle & s, const String & mime) {
- s << "HTTP/1.1 200 OK" << endhl <<
+void HttpServ::SendHeads(Handle * s, const String & mime) {
+ *s << "HTTP/1.1 200 OK" << endhl <<
"Server: " << name << endhl <<
"Cache-Control: no-cache" << endhl <<
"Connection-Type: closed" << endhl <<
@@ -262,8 +263,8 @@ void HttpServ::SendHeads(Handle & s, const String & mime) {
* Affichage d'une erreur 404.
*/
-void HttpServ::ShowError(Handle & s) {
- s << "HTTP/1.1 404 Not Found" << endhl <<
+void HttpServ::ShowError(Handle * s) {
+ *s << "HTTP/1.1 404 Not Found" << endhl <<
"Server: " << name << endhl <<
"Cache-Control: no-cache" << endhl <<
"Connection-Type: closed" << endhl <<