iipsrv 1.3
iipsrv is an advanced high-performance feature-rich image server for web-based streamed viewing and zooming of ultra high-resolution images
Writer.h
1/*
2 IIP Generic Output Writer Classes
3
4 Copyright (C) 2006-2025 Ruven Pillay.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software Foundation,
18 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
19*/
20
21
22#ifndef _WRITER_H
23#define _WRITER_H
24
25// Windows vcpkg requires prefix for include
26#ifdef WIN32
27#include <fastcgi/fcgiapp.h>
28#else
29#include <fcgiapp.h>
30#endif
31
32#include <cstdio>
33#include <cstring>
34
35
37class Writer {
38
39 public:
40
41 virtual ~Writer() = 0;
42
44
47 virtual int putStr( const char* msg, int len ) = 0;
48
50
53 virtual int putS( const char* msg ) = 0;
54
56
59 virtual int printf( const char* msg ) = 0;
60
62
63 virtual int flush() = 0;
64
65};
66
67
68
71
72 private:
73
75 FCGX_Stream *out;
76
78 static const unsigned int bufsize = 65536;
79
81
84 void cpy2buf( const char* msg, size_t len ){
85 if( sz+len > bufsize ) buffer = (char*) realloc( buffer, sz+len );
86 if( buffer ){
87 memcpy( &buffer[sz], msg, len );
88 sz += len;
89 }
90 };
91
92
93 public:
94
95 char* buffer;
96 size_t sz;
97
99
100 FCGIWriter( FCGX_Stream* o ){
101 out = o;
102 buffer = (char*) malloc(bufsize);
103 sz = 0;
104 };
105
107 ~FCGIWriter(){ if(buffer) free(buffer); };
108
110
114 int putStr( const char* msg, int len ){
115 cpy2buf( msg, len );
116 return FCGX_PutStr( msg, len, out );
117 };
118
120
123 int putS( const char* msg ){
124 int len = (int) strlen( msg );
125 cpy2buf( msg, len );
126 if( FCGX_PutStr( msg, len, out ) != len ) return -1;
127 return len;
128 }
129
131
134 int printf( const char* msg ){
135 cpy2buf( msg, strlen(msg) );
136 return FCGX_FPrintF( out, msg );
137 };
138
140
141 int flush(){
142 return FCGX_FFlush( out );
143 };
144
145};
146
147
148
151
152 private:
153
155 FILE* out;
156
157 public:
158
160
161 FileWriter( FILE* o ){ out = o; };
162
164
168 int putStr( const char* msg, int len ){
169 return fwrite( (void*) msg, sizeof(char), len, out );
170 };
171
173
176 int putS( const char* msg ){
177 return fputs( msg, out );
178 }
179
181
184 int printf( const char* msg ){
185 return fprintf( out, "%s", msg );
186 };
187
189
190 int flush(){
191 return fflush( out );
192 };
193
194};
195
196
197#endif
FCGI Writer Class.
Definition Writer.h:70
char * buffer
Buffer.
Definition Writer.h:95
int flush()
Flush the output buffer.
Definition Writer.h:141
int putS(const char *msg)
Write out a string using puts()
Definition Writer.h:123
int putStr(const char *msg, int len)
Add the message to our buffer.
Definition Writer.h:114
size_t sz
Size of buffer.
Definition Writer.h:96
~FCGIWriter()
Destructor.
Definition Writer.h:107
FCGIWriter(FCGX_Stream *o)
Constructor.
Definition Writer.h:100
int printf(const char *msg)
Write out a string using printf()
Definition Writer.h:134
File Writer Class.
Definition Writer.h:150
int putStr(const char *msg, int len)
Add the message to our buffer.
Definition Writer.h:168
int printf(const char *msg)
Write out a string using printf()
Definition Writer.h:184
int putS(const char *msg)
Write out a string using puts()
Definition Writer.h:176
int flush()
Flush the output buffer.
Definition Writer.h:190
FileWriter(FILE *o)
Constructor.
Definition Writer.h:161
Virtual base class for various writers.
Definition Writer.h:37
virtual int flush()=0
Flush the output buffer.
virtual int putStr(const char *msg, int len)=0
Write out a binary string.
virtual int putS(const char *msg)=0
Write out a string using puts()
virtual int printf(const char *msg)=0
Write out a string using printf()