summaryrefslogtreecommitdiff
path: root/httpd/tnt/job.h
diff options
context:
space:
mode:
Diffstat (limited to 'httpd/tnt/job.h')
-rw-r--r--httpd/tnt/job.h201
1 files changed, 0 insertions, 201 deletions
diff --git a/httpd/tnt/job.h b/httpd/tnt/job.h
deleted file mode 100644
index 5e839fd..0000000
--- a/httpd/tnt/job.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/* tnt/job.h
- * Copyright (C) 2003-2005 Tommi Maekitalo
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * is provided AS IS, WITHOUT ANY WARRANTY; without even the implied
- * warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, and
- * NON-INFRINGEMENT. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#ifndef TNT_JOB_H
-#define TNT_JOB_H
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-#include <deque>
-#include <cxxtools/thread.h>
-#include <cxxtools/tcpstream.h>
-#include <tnt/httprequest.h>
-#include <tnt/httpparser.h>
-#include <tnt/pointer.h>
-#include <time.h>
-#include "tnt/ssl.h"
-
-/**
-// in tntnet (mainthread):
-Jobqueue queue;
-void mainloop()
-{
- while (1)
- {
- Jobqueue::JobPtr j = new Tcpjob();
- j->accept(poller.get());
- queue.put(j);
- }
-}
-
-// in server (workerthread):
-void Server::run()
-{
- while (1)
- {
- Jobqueue::JobPtr j = queue.get();
- std::iostream& socket = j->getStream();
- processRequest(socket);
- }
-}
-*/
-
-namespace tnt
-{
- /** Job - one per request */
- class Job
- {
- unsigned keepAliveCounter;
-
- HttpRequest request;
- HttpMessage::Parser parser;
- time_t lastAccessTime;
-
- unsigned refs;
-
- static unsigned socket_read_timeout;
- static unsigned socket_write_timeout;
- static unsigned keepalive_max;
- static unsigned socket_buffer_size;
-
- public:
- Job()
- : keepAliveCounter(keepalive_max),
- parser(request),
- lastAccessTime(0),
- refs(0)
- { }
-
- protected:
- virtual ~Job();
-
- public:
- unsigned addRef() { return ++refs; }
- unsigned release()
- {
- if (--refs == 0)
- {
- delete this;
- return 0;
- }
- else
- return refs;
- }
-
- virtual std::iostream& getStream() = 0;
- virtual int getFd() const = 0;
- virtual void setRead() = 0;
- virtual void setWrite() = 0;
-
- HttpRequest& getRequest() { return request; }
- HttpMessage::Parser& getParser() { return parser; }
-
- unsigned decrementKeepAliveCounter()
- { return keepAliveCounter > 0 ? --keepAliveCounter : 0; }
- void clear();
- void touch() { time(&lastAccessTime); }
- int msecToTimeout(time_t currentTime) const;
-
- static void setSocketReadTimeout(unsigned ms) { socket_read_timeout = ms; }
- static void setSocketWriteTimeout(unsigned ms) { socket_write_timeout = ms; }
- static void setKeepAliveMax(unsigned n) { keepalive_max = n; }
- static void setSocketBufferSize(unsigned b) { socket_buffer_size = b; }
-
- static unsigned getSocketReadTimeout() { return socket_read_timeout; }
- static unsigned getSocketWriteTimeout() { return socket_write_timeout; }
- static unsigned getKeepAliveTimeout();
- static unsigned getKeepAliveMax() { return keepalive_max; }
- static unsigned getSocketBufferSize() { return socket_buffer_size; }
- };
-
- class Tcpjob : public Job
- {
- cxxtools::net::iostream socket;
-
- public:
- Tcpjob()
- : socket(getSocketBufferSize(), getSocketReadTimeout())
- { }
-
- void accept(const cxxtools::net::Server& listener);
-
- std::iostream& getStream();
- int getFd() const;
- void setRead();
- void setWrite();
- };
-
-#ifdef USE_SSL
- class SslTcpjob : public Job
- {
- ssl_iostream socket;
-
- public:
- SslTcpjob()
- : socket(getSocketBufferSize(), getSocketReadTimeout())
- { }
-
- void accept(const SslServer& listener);
-
- std::iostream& getStream();
- int getFd() const;
- void setRead();
- void setWrite();
- };
-#endif // USE_SSL
-
- /** Jobqueue - one per process */
- class Jobqueue
- {
- public:
- typedef Pointer<Job> JobPtr;
-
- cxxtools::Condition noWaitThreads;
-
- private:
- std::deque<JobPtr> jobs;
- cxxtools::Mutex mutex;
- cxxtools::Condition notEmpty;
- cxxtools::Condition notFull;
- unsigned waitThreads;
- unsigned capacity;
-
- public:
- explicit Jobqueue(unsigned capacity_)
- : waitThreads(0),
- capacity(capacity_)
- { }
-
- void put(JobPtr j);
- JobPtr get();
-
- void setCapacity(unsigned c)
- { capacity = c; }
- unsigned getCapacity() const
- { return capacity; }
- unsigned getWaitThreadCount() const
- { return waitThreads; }
- bool empty() const
- { return jobs.empty(); }
- };
-}
-
-#endif // TNT_JOB_H
-