summaryrefslogtreecommitdiff
path: root/project2/cgi/FCgiIO.h
diff options
context:
space:
mode:
Diffstat (limited to 'project2/cgi/FCgiIO.h')
-rw-r--r--project2/cgi/FCgiIO.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/project2/cgi/FCgiIO.h b/project2/cgi/FCgiIO.h
new file mode 100644
index 0000000..a8b67f3
--- /dev/null
+++ b/project2/cgi/FCgiIO.h
@@ -0,0 +1,153 @@
+/* -*-c++-*- */
+/*
+ * $Id: FCgiIO.h,v 1.3 2007/07/02 18:48:19 sebdiaz Exp $
+ *
+ * Copyright (C) 2002 Steve McAndrewSmith
+ * Copyright (C) 2002 Stephen F. Booth
+ * 2007 Sebastien DIAZ <sebastien.diaz@gmail.com>
+ * Part of the GNU cgicc library, http://www.gnu.org/software/cgicc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA*
+ */
+
+#ifndef _FCGIIO_H_
+#define _FCGIIO_H_ 1
+
+#ifdef __GNUG__
+# pragma interface
+#endif
+
+/*! \file FCgiIO.h
+ * \brief Class that implements input and output through a FastCGI request.
+ *
+ * This class provides access to the input byte-stream and environment
+ * variable interfaces of a FastCGI request. It is fully compatible with the
+ * Cgicc input API.
+ *
+ * It also provides access to the request's output and error streams, using a
+ * similar interface.
+ */
+
+#include <ostream>
+#include <string>
+#include <map>
+
+#include "fcgio.h"
+
+#include "cgicc/CgiInput.h"
+
+namespace cgicc {
+
+ // ============================================================
+ // Class FCgiIO
+ // ============================================================
+
+ /*! \class FCgiIO FCgiIO.h FCgiIO.h
+ * \brief Class that implements input and output through a FastCGI request.
+ *
+ * This class provides access to the input byte-stream and environment
+ * variable interfaces of a FastCGI request. It is fully compatible with the
+ * Cgicc input API.
+ *
+ * It also provides access to the request's output and error streams, using a
+ * similar interface.
+ */
+ class CGICC_API FCgiIO : public cgicc::CgiInput, public std::ostream
+ {
+ public:
+
+ // ============================================================
+
+ /*! \name Constructor and Destructor */
+ //@{
+
+ /*!
+ * \brief Constructor
+ *
+ * Create a new FCgiIO object
+ */
+ FCgiIO(FCGX_Request& request);
+
+ /*!
+ * \brief Copy constructor
+ *
+ */
+ FCgiIO(const FCgiIO& io);
+
+ /*!
+ * \brief Destructor
+ *
+ * Delete this FCgiIO object
+ */
+ virtual inline
+ ~FCgiIO()
+ {}
+ //@}
+
+ // ============================================================
+
+ /*! \name Data Sources */
+ //@{
+
+ /*!
+ * \brief Read data from the request's input stream.
+ *
+ * \param data The target buffer
+ * \param length The number of characters to read
+ * \return The number of characters read
+ */
+ virtual inline size_t read(char *data, size_t length)
+ {
+ return FCGX_GetStr(data, length, fRequest.in);
+ }
+
+ /*!
+ * \brief Query the value of an environment variable stored in the request.
+ *
+ * \param varName The name of an environment variable
+ * \return The value of the requested environment variable, or an empty
+ * string if not found.
+ */
+ virtual inline std::string getenv(const char *varName)
+ {
+ return fEnv[varName];
+ }
+ //@}
+
+ // ============================================================
+
+ /*! \name Data Target Streams */
+ //@{
+
+ /*!
+ * \brief Provides access to the error stream.
+ */
+ inline std::ostream& err(void)
+ {
+ return fErr;
+ }
+ //@}
+
+ protected:
+ FCGX_Request& fRequest;
+ fcgi_streambuf fOutBuf;
+ fcgi_streambuf fErrBuf;
+ std::ostream fErr;
+ std::map<std::string, std::string> fEnv;
+ };
+
+} // namespace cgicc
+
+#endif /* ! _FCGIIO_H_ */