fix validation, organization, and links
[catagits/fcgi2.git] / include / fcgio.h
CommitLineData
c124bb9b 1//
e9c3e4d1 2// Provides support for FastCGI via C++ iostreams.
3//
df70e743 4// $Id: fcgio.h,v 1.11 2001/11/26 19:03:12 robs Exp $
98e2ddaa 5//
6// This work is based on routines written by George Feinberg. They
7// have been mostly re-written and extensively changed by
c124bb9b 8// Michael Richards.
9//
98e2ddaa 10// Rewritten again with bug fixes and numerous enhancements by
e9c3e4d1 11// Michael Shell.
12//
f684a497 13// And rewritten again by Rob Saccoccio.
98e2ddaa 14//
15// Special Thanks to Dietmar Kuehl for his help and the numerous custom
16// streambuf examples on his web site.
17//
e9c3e4d1 18// Copyright (c) 2000 Tux the Linux Penguin
f684a497 19// Copyright (c) 2001 Rob Saccoccio and Chelsea Networks
c124bb9b 20//
21// You are free to use this software without charge or royalty
98e2ddaa 22// as long as this notice is not removed or altered, and recognition
c124bb9b 23// is given to the author(s)
24//
98e2ddaa 25// This code is offered as-is without any warranty either expressed or
26// implied; without even the implied warranty of MERCHANTABILITY or
e9c3e4d1 27// FITNESS FOR A PARTICULAR PURPOSE. If it breaks, you get to keep
f684a497 28// both halves.
98e2ddaa 29
c124bb9b 30#ifndef FCGIO_H
31#define FCGIO_H
98e2ddaa 32
c124bb9b 33#include <iostream.h>
02089704 34
0a62d748 35#include "fcgiapp.h"
02089704 36
af4a4f30 37#ifndef DLLAPI
38#ifdef _WIN32
39#define DLLAPI __declspec(dllimport)
40#else
41#define DLLAPI
42#endif
43#endif
44
f684a497 45/*
46 * fcgi_streambuf
47 */
98e2ddaa 48class fcgi_streambuf : public streambuf
49{
f684a497 50public:
98e2ddaa 51
e9c3e4d1 52 // Note that if no buf is assigned (the default), iostream methods
53 // such as peek(), unget() and putback() will fail. If a buf is
54 // assigned, I/O is a bit less effecient and output streams will
55 // have to be flushed (or the streambuf destroyed) before the next
56 // call to "accept".
57 DLLAPI fcgi_streambuf(FCGX_Stream * fcgx, char * buf, int len);
58
59 DLLAPI fcgi_streambuf(char * buf, int len);
60
61 DLLAPI fcgi_streambuf(FCGX_Stream * fcgx = NULL);
98e2ddaa 62
f684a497 63 DLLAPI ~fcgi_streambuf(void);
98e2ddaa 64
282622d5 65 DLLAPI int attach(FCGX_Stream * fcgx);
98e2ddaa 66
df70e743 67protected:
68
f684a497 69 // Consume the put area (if buffered) and c (if c is not EOF).
70 DLLAPI virtual int overflow(int);
98e2ddaa 71
e9c3e4d1 72 // Flush the put area (if buffered) and the FCGX buffer to the client.
f684a497 73 // Note: sync() is protected in some implementations.
74 DLLAPI virtual int sync();
98e2ddaa 75
4c4f72f0 76 // Remove and return the current character.
77 DLLAPI virtual int uflow();
78
79 // Fill the get area (if buffered) and return the current character.
f684a497 80 DLLAPI virtual int underflow();
98e2ddaa 81
e9c3e4d1 82 // Use a buffer. The only reasons that a buffer would be useful is
83 // to support the use of the unget()/putback() or seek() methods. Using
84 // a buffer will result in less efficient I/O. Note: the underlying
85 // FastCGI library (FCGX) maintains its own input and output buffers.
f684a497 86 DLLAPI virtual streambuf * setbuf(char * buf, int len);
98e2ddaa 87
e9c3e4d1 88 DLLAPI virtual int xsgetn(char * s, int n);
89 DLLAPI virtual int xsputn(const char * s, int n);
98e2ddaa 90
f684a497 91private:
c124bb9b 92
f684a497 93 FCGX_Stream * fcgx;
c124bb9b 94
e9c3e4d1 95 // buf is just handy to have around
96 char * buf;
97
98 // this isn't kept by the base class
f684a497 99 int bufsize;
e9c3e4d1 100
101 void init(FCGX_Stream * fcgx, char * buf, int bufsize);
102
103 void reset(void);
c124bb9b 104};
105
f684a497 106/*
107 * fcgi_istream - deprecated
108 */
98e2ddaa 109class fcgi_istream : public istream
110{
f684a497 111public:
98e2ddaa 112
f684a497 113 // deprecated
282622d5 114 DLLAPI fcgi_istream(FCGX_Stream * fcgx = NULL);
f684a497 115
116 // deprecated
117 DLLAPI ~fcgi_istream(void) {}
98e2ddaa 118
f684a497 119 // deprecated
282622d5 120 DLLAPI virtual void attach(FCGX_Stream * fcgx);
98e2ddaa 121
f684a497 122private:
c124bb9b 123
98e2ddaa 124 fcgi_streambuf fcgi_strmbuf;
c124bb9b 125};
126
f684a497 127/*
128 * fcgi_ostream - deprecated
129 */
98e2ddaa 130class fcgi_ostream : public ostream
131{
f684a497 132public:
133
134 // deprecated
282622d5 135 DLLAPI fcgi_ostream(FCGX_Stream * fcgx = NULL);
f684a497 136
137 // deprecated
138 DLLAPI ~fcgi_ostream(void) {}
98e2ddaa 139
f684a497 140 // deprecated
282622d5 141 DLLAPI virtual void attach(FCGX_Stream *fcgx);
98e2ddaa 142
f684a497 143private:
c124bb9b 144
98e2ddaa 145 fcgi_streambuf fcgi_strmbuf;
146};
c124bb9b 147
f684a497 148#endif /* FCGIO_H */