ncbicgir.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:8k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbicgir.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2003/11/18 15:42:45  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.15
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CGI___NCBICGIR__HPP
  10. #define CGI___NCBICGIR__HPP
  11. /*  $Id: ncbicgir.hpp,v 1000.1 2003/11/18 15:42:45 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Authors:  Eugene Vasilchenko, Denis Vakatov
  37. *
  38. * File Description:
  39. *   CCgiResponse  -- CGI response generator class
  40. *
  41. */
  42. #include <cgi/ncbicgi.hpp>
  43. #include <map>
  44. /** @addtogroup CGIReqRes
  45.  *
  46.  * @{
  47.  */
  48. BEGIN_NCBI_SCOPE
  49. class NCBI_XCGI_EXPORT CCgiResponse
  50. {
  51. public:
  52.     // 'ctors
  53.     CCgiResponse(CNcbiOstream* os = 0, int ofd = -1);
  54.     // (default sets out.stream to "cout", ofd to STDOUT_FILENO)
  55.     ~CCgiResponse(void);
  56.     // Set/get the "raw CGI" response type
  57.     void SetRawCgi(bool is_raw);
  58.     bool IsRawCgi(void) const;
  59.     // Set response status.
  60.     // NOTE:  use this method rather than SetHeaderValue("Status", ...)
  61.     //        as it is safer and it works for the "raw CGI" response type, too.
  62.     void SetStatus(unsigned int code, const string& reason = kEmptyStr);
  63.     // Header setters
  64.     void SetHeaderValue   (const string& name, const string& value);
  65.     void SetHeaderValue   (const string& name, const tm&     value);
  66.     void RemoveHeaderValue(const string& name);
  67.     // Header getter
  68.     string GetHeaderValue (const string& name) const;
  69.     bool   HaveHeaderValue(const string& name) const;
  70.     // Set/get content type
  71.     void   SetContentType(const string& type);
  72.     string GetContentType(void) const;
  73.     // Get cookies set
  74.     const CCgiCookies& Cookies(void) const;
  75.     CCgiCookies&       Cookies(void);
  76.     // Set/get output stream (NULL here means "no output stream")
  77.     void          SetOutput(CNcbiOstream* os, int fd = -1);
  78.     CNcbiOstream* GetOutput(void) const;
  79.     int           GetOutputFD(void) const;
  80.     // Get output stream.  Throw exception if GetOutput() is NULL
  81.     CNcbiOstream& out(void) const;
  82.     // Flush output stream
  83.     void Flush(void) const;
  84.     // Write HTTP response header to the output stream
  85.     CNcbiOstream& WriteHeader(void) const;
  86.     CNcbiOstream& WriteHeader(CNcbiOstream& os) const;
  87. protected:
  88.     static const string sm_ContentTypeName;     // Content type header name
  89.     static const string sm_ContentTypeDefault;  // Dflt content type: text/html
  90.     static const string sm_HTTPStatusName;      // Status header name:   Status
  91.     static const string sm_HTTPStatusDefault;   // Default HTTP status:  200 OK
  92.     
  93.     typedef map<string, string, PNocase> TMap;
  94.     bool          m_IsRawCgi;      // The "raw CGI" flag
  95.     TMap          m_HeaderValues;  // Header lines in alphabetical order
  96.     CCgiCookies   m_Cookies;       // Cookies
  97.     CNcbiOstream* m_Output;        // Default output stream
  98.     int           m_OutputFD;      // Output file descriptor, if available.
  99.     // Prohibit copy constructor and assignment operator
  100.     CCgiResponse(const CCgiResponse&);
  101.     CCgiResponse& operator= (const CCgiResponse&);
  102. };
  103. /* @} */
  104. /////////////////////////////////////////////////////////////////////////////
  105. //  IMPLEMENTATION of INLINE functions
  106. /////////////////////////////////////////////////////////////////////////////
  107. /////////////////////////////////////////////////////////////////////////////
  108. //  CCgiResponse::
  109. //
  110. inline void CCgiResponse::SetRawCgi(bool is_raw)
  111. {
  112.     m_IsRawCgi = is_raw;
  113. }
  114. inline bool CCgiResponse::IsRawCgi(void) const
  115. {
  116.     return m_IsRawCgi;
  117. }
  118. inline void CCgiResponse::SetContentType(const string& type)
  119. {
  120.     SetHeaderValue(sm_ContentTypeName, type);
  121. }
  122. inline string CCgiResponse::GetContentType(void) const
  123. {
  124.     return GetHeaderValue(sm_ContentTypeName);
  125. }
  126. inline const CCgiCookies& CCgiResponse::Cookies(void) const
  127. {
  128.     return m_Cookies;
  129. }
  130. inline CCgiCookies& CCgiResponse::Cookies(void)
  131. {
  132.     return m_Cookies;
  133. }
  134. inline void CCgiResponse::SetOutput(CNcbiOstream* out, int fd)
  135. {
  136.     m_Output   = out;
  137.     m_OutputFD = fd;
  138. }
  139. inline CNcbiOstream* CCgiResponse::GetOutput(void) const
  140. {
  141.     return m_Output;
  142. }
  143. inline int CCgiResponse::GetOutputFD(void) const
  144. {
  145.     return m_OutputFD;
  146. }
  147. inline CNcbiOstream& CCgiResponse::WriteHeader(void) const
  148. {
  149.     return WriteHeader(out());
  150. }
  151. END_NCBI_SCOPE
  152. /*
  153.  * ===========================================================================
  154.  *
  155.  * $Log: ncbicgir.hpp,v $
  156.  * Revision 1000.1  2003/11/18 15:42:45  gouriano
  157.  * PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.15
  158.  *
  159.  * Revision 1.15  2003/11/05 18:40:55  dicuccio
  160.  * Added export specifiers
  161.  *
  162.  * Revision 1.14  2003/04/10 19:01:44  siyan
  163.  * Added doxygen support
  164.  *
  165.  * Revision 1.13  2002/03/19 00:34:54  vakatov
  166.  * Added convenience method CCgiResponse::SetStatus().
  167.  * Treat the status right in WriteHeader() for both plain and "raw CGI" cases.
  168.  * Made all header values to be case-insensitive.
  169.  *
  170.  * Revision 1.12  2001/10/04 18:17:52  ucko
  171.  * Accept additional query parameters for more flexible diagnostics.
  172.  * Support checking the readiness of CGI input and output streams.
  173.  *
  174.  * Revision 1.11  2001/07/17 22:39:53  vakatov
  175.  * CCgiResponse:: Made GetOutput() fully consistent with out().
  176.  * Prohibit copy constructor and assignment operator.
  177.  * Retired "ncbicgir.inl", moved inline functions to the header itself, made
  178.  * some non-inline. Improved comments, got rid of some unused STL headers.
  179.  * Well-groomed the code.
  180.  *
  181.  * Revision 1.10  2001/05/17 14:49:37  lavr
  182.  * Typos corrected
  183.  *
  184.  * Revision 1.9  1999/11/02 20:35:39  vakatov
  185.  * Redesigned of CCgiCookie and CCgiCookies to make them closer to the
  186.  * cookie standard, smarter, and easier in use
  187.  *
  188.  * Revision 1.8  1999/05/11 03:11:46  vakatov
  189.  * Moved the CGI API(along with the relevant tests) from "corelib/" to "cgi/"
  190.  *
  191.  * Revision 1.7  1999/04/28 16:54:19  vasilche
  192.  * Implemented stream input processing for FastCGI applications.
  193.  *
  194.  * Revision 1.6  1998/12/30 21:50:27  vakatov
  195.  * Got rid of some redundant headers
  196.  *
  197.  * Revision 1.5  1998/12/28 17:56:26  vakatov
  198.  * New CVS and development tree structure for the NCBI C++ projects
  199.  *
  200.  * Revision 1.4  1998/12/11 22:00:32  vasilche
  201.  * Added raw CGI response
  202.  *
  203.  * Revision 1.3  1998/12/11 18:00:52  vasilche
  204.  * Added cookies and output stream
  205.  *
  206.  * Revision 1.2  1998/12/10 19:58:18  vasilche
  207.  * Header option made more generic
  208.  *
  209.  * Revision 1.1  1998/12/09 20:18:10  vasilche
  210.  * Initial implementation of CGI response generator
  211.  *
  212.  * ===========================================================================
  213.  */
  214. #endif  /* CGI___NCBICGIR__HPP */