Commit | Line | Data |
c124bb9b |
1 | // |
f684a497 |
2 | // Provides support for FastCGI via C++ iostreams.\r |
3 | //\r |
282622d5 |
4 | // $Id: fcgio.h,v 1.8 2001/11/21 20:18:13 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 |
f684a497 |
11 | // Michael Shell.\r |
12 | // \r |
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 | // |
f684a497 |
18 | // Copyright (c) 2000 Tux the Linux Penguin\r |
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 |
f684a497 |
27 | // FITNESS FOR A PARTICULAR PURPOSE. If it breaks, you get to keep \r |
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 |
48 | class fcgi_streambuf : public streambuf |
49 | { |
f684a497 |
50 | public: |
98e2ddaa |
51 | |
282622d5 |
52 | // Note that if no buf is assigned (the default), iostream methods\r |
53 | // such as peek(), unget() and putback() will fail. If a buf is\r |
54 | // assigned, I/O is a bit less effecient and output streams will\r |
55 | // have to be flushed (or the streambuf destroyed) before the next \r |
56 | // call to "accept".\r |
57 | DLLAPI fcgi_streambuf(FCGX_Stream * fcgx, char * buf, int len);\r |
58 | \r |
59 | DLLAPI fcgi_streambuf(char * buf, int len);\r |
60 | \r |
61 | DLLAPI fcgi_streambuf(FCGX_Stream * fcgx = NULL);\r |
98e2ddaa |
62 | |
f684a497 |
63 | DLLAPI ~fcgi_streambuf(void); |
98e2ddaa |
64 | |
282622d5 |
65 | DLLAPI int attach(FCGX_Stream * fcgx); |
98e2ddaa |
66 | |
f684a497 |
67 | // Consume the put area (if buffered) and c (if c is not EOF). |
68 | DLLAPI virtual int overflow(int); |
98e2ddaa |
69 | |
f684a497 |
70 | // Flush the put area (if buffered) and the FCGX buffer to the client.\r |
71 | // Note: sync() is protected in some implementations. |
72 | DLLAPI virtual int sync(); |
98e2ddaa |
73 | |
f684a497 |
74 | // Fill the get area (if buffered) and return the next character. |
75 | DLLAPI virtual int underflow(); |
98e2ddaa |
76 | |
f684a497 |
77 | // Use a buffer. The only reasons that a buffer would be useful is\r |
78 | // to support the use of the unget()/putback() or seek() methods. Using\r |
79 | // a buffer will result in less efficient I/O. Note: the underlying\r |
80 | // FastCGI library (FCGX) maintains its own input and output buffers. \r |
81 | // Note: setbuf() is protected in some implementations. |
82 | DLLAPI virtual streambuf * setbuf(char * buf, int len); |
98e2ddaa |
83 | |
f684a497 |
84 | DLLAPI virtual int xsgetn(char * s, int n);\r |
85 | DLLAPI virtual int xsputn(const char * s, int n);\r |
98e2ddaa |
86 | |
f684a497 |
87 | private: |
c124bb9b |
88 | |
f684a497 |
89 | FCGX_Stream * fcgx; |
c124bb9b |
90 | |
f684a497 |
91 | // buf is just handy to have around\r |
92 | char * buf;\r |
93 | \r |
94 | // this isn't kept by the base class\r |
95 | int bufsize; |
96 | \r |
282622d5 |
97 | void init(FCGX_Stream * fcgx, char * buf, int bufsize);\r |
98 | \r |
f684a497 |
99 | void reset(void);\r |
c124bb9b |
100 | }; |
101 | |
f684a497 |
102 | /* |
103 | * fcgi_istream - deprecated |
104 | */ |
98e2ddaa |
105 | class fcgi_istream : public istream |
106 | { |
f684a497 |
107 | public: |
98e2ddaa |
108 | |
f684a497 |
109 | // deprecated |
282622d5 |
110 | DLLAPI fcgi_istream(FCGX_Stream * fcgx = NULL); |
f684a497 |
111 | |
112 | // deprecated |
113 | DLLAPI ~fcgi_istream(void) {} |
98e2ddaa |
114 | |
f684a497 |
115 | // deprecated |
282622d5 |
116 | DLLAPI virtual void attach(FCGX_Stream * fcgx); |
98e2ddaa |
117 | |
f684a497 |
118 | private: |
c124bb9b |
119 | |
98e2ddaa |
120 | fcgi_streambuf fcgi_strmbuf; |
c124bb9b |
121 | }; |
122 | |
f684a497 |
123 | /* |
124 | * fcgi_ostream - deprecated |
125 | */ |
98e2ddaa |
126 | class fcgi_ostream : public ostream |
127 | { |
f684a497 |
128 | public: |
129 | |
130 | // deprecated |
282622d5 |
131 | DLLAPI fcgi_ostream(FCGX_Stream * fcgx = NULL); |
f684a497 |
132 | |
133 | // deprecated |
134 | DLLAPI ~fcgi_ostream(void) {} |
98e2ddaa |
135 | |
f684a497 |
136 | // deprecated |
282622d5 |
137 | DLLAPI virtual void attach(FCGX_Stream *fcgx); |
98e2ddaa |
138 | |
f684a497 |
139 | private: |
c124bb9b |
140 | |
98e2ddaa |
141 | fcgi_streambuf fcgi_strmbuf; |
142 | }; |
c124bb9b |
143 | |
f684a497 |
144 | #endif /* FCGIO_H */ |