summaryrefslogtreecommitdiff
path: root/httpd/job.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'httpd/job.cpp')
-rw-r--r--httpd/job.cpp240
1 files changed, 0 insertions, 240 deletions
diff --git a/httpd/job.cpp b/httpd/job.cpp
deleted file mode 100644
index 49ecba6..0000000
--- a/httpd/job.cpp
+++ /dev/null
@@ -1,240 +0,0 @@
-/* job.cpp
- * 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
- *
- */
-
-#include "tnt/job.h"
-#include <tnt/httpreply.h>
-#include <cxxtools/log.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-
-log_define("tntnet.job")
-
-namespace tnt
-{
- unsigned Job::socket_read_timeout = 200;
- unsigned Job::socket_write_timeout = 10000;
- unsigned Job::keepalive_max = 1000;
- unsigned Job::socket_buffer_size = 16384;
-
- Job::~Job()
- { }
-
- void Job::clear()
- {
- parser.reset();
- request.clear();
- touch();
- }
-
- int Job::msecToTimeout(time_t currentTime) const
- {
- return (lastAccessTime - currentTime + 1) * 1000
- + getKeepAliveTimeout()
- - getSocketReadTimeout();
- }
-
- unsigned Job::getKeepAliveTimeout()
- {
- return HttpReply::getKeepAliveTimeout();
- }
-
- ////////////////////////////////////////////////////////////////////////
- // Tcpjob
- //
- void Tcpjob::accept(const cxxtools::net::Server& listener)
- {
- log_debug("accept");
- socket.accept(listener);
-
- struct sockaddr_storage s = socket.getSockAddr();
- struct sockaddr_storage sockaddr;
- memcpy(&sockaddr, &s, sizeof(sockaddr));
-
- char buffer[INET6_ADDRSTRLEN];
- log_debug("connection accepted from "
- << inet_ntop(AF_INET6, &(socket.getPeeraddr()), buffer, sizeof(buffer)));
-
- getRequest().setPeerAddr(socket.getPeeraddr());
- getRequest().setServerAddr(sockaddr);
- getRequest().setSsl(false);
- }
-
- std::iostream& Tcpjob::getStream()
- {
- return socket;
- }
-
- int Tcpjob::getFd() const
- {
- return socket.getFd();
- }
-
- void Tcpjob::setRead()
- {
- socket.setTimeout(getSocketReadTimeout());
- }
-
- void Tcpjob::setWrite()
- {
- socket.setTimeout(getSocketWriteTimeout());
- }
-
-#ifdef USE_SSL
- ////////////////////////////////////////////////////////////////////////
- // SslTcpjob
- //
- void SslTcpjob::accept(const SslServer& listener)
- {
- log_debug("accept (ssl)");
- socket.accept(listener);
- log_debug("connection accepted (ssl)");
-
- struct sockaddr_storage s = socket.getSockAddr();
- struct sockaddr_storage sockaddr;
- memcpy(&sockaddr, &s, sizeof(sockaddr));
-
- getRequest().setPeerAddr(socket.getPeeraddr());
- getRequest().setServerAddr(sockaddr);
- getRequest().setSsl(true);
-
- setRead();
- }
-
- std::iostream& SslTcpjob::getStream()
- {
- return socket;
- }
-
- int SslTcpjob::getFd() const
- {
- return socket.getFd();
- }
-
- void SslTcpjob::setRead()
- {
- socket.setTimeout(getSocketReadTimeout());
- }
-
- void SslTcpjob::setWrite()
- {
- socket.setTimeout(getSocketWriteTimeout());
- }
-
-#endif // USE_SSL
-
-#ifdef USE_GNUTLS
- ////////////////////////////////////////////////////////////////////////
- // GnuTlsTcpjob
- //
- void GnuTlsTcpjob::accept(const GnuTlsServer& listener)
- {
- log_debug("accept (ssl)");
- socket.accept(listener);
- log_debug("connection accepted (ssl)");
-
- struct sockaddr_storage s = socket.getSockAddr();
- struct sockaddr_storage sockaddr;
- memcpy(&sockaddr, &s, sizeof(sockaddr));
-
- getRequest().setPeerAddr(socket.getPeeraddr());
- getRequest().setServerAddr(sockaddr);
- getRequest().setSsl(true);
-
- setRead();
- }
-
- std::iostream& GnuTlsTcpjob::getStream()
- {
- return socket;
- }
-
- int GnuTlsTcpjob::getFd() const
- {
- return socket.getFd();
- }
-
- void GnuTlsTcpjob::setRead()
- {
- socket.setTimeout(getSocketReadTimeout());
- }
-
- void GnuTlsTcpjob::setWrite()
- {
- socket.setTimeout(getSocketWriteTimeout());
- }
-
-#endif // USE_GNUTLS
-
- //////////////////////////////////////////////////////////////////////
- // Jobqueue
- //
- void Jobqueue::put(JobPtr j)
- {
- log_debug("Jobqueue::put");
- j->touch();
-
- cxxtools::MutexLock lock(mutex);
-
- if (capacity > 0)
- {
- while (jobs.size() >= capacity)
- {
- log_warn("Jobqueue full");
- notFull.wait(lock);
- }
- }
-
- jobs.push_back(j);
-
- if (waitThreads == 0)
- {
- log_info("no waiting threads left");
- noWaitThreads.signal();
- }
-
- notEmpty.signal();
- }
-
- Jobqueue::JobPtr Jobqueue::get()
- {
- // wait, until a job is available
- ++waitThreads;
-
- cxxtools::MutexLock lock(mutex);
- while (jobs.empty())
- notEmpty.wait(lock);
-
- --waitThreads;
-
- log_debug("Jobqueue: fetch job " << waitThreads << " waiting threads left");
-
- // take next job (queue is locked)
- JobPtr j = jobs.front();
- jobs.pop_front();
-
- // if there are more jobs, wake onther thread
- if (!jobs.empty())
- notEmpty.signal();
- notFull.signal();
-
- return j;
- }
-
-}