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