1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
/*
IIP Response Handler Class
Copyright (C) 2003-2015 Ruven Pillay.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "IIPResponse.h"
#include <cstdio>
#include <cstring>
using namespace std;
IIPResponse::IIPResponse(){
responseBody = "";
error = "";
protocol = "";
server = "Server: iipsrv/" + string(VERSION);
powered = "X-Powered-By: IIPImage";
modified = "";
mimeType = "Content-Type: application/vnd.netfpx";
cors = "";
eof = "\r\n";
sent = false;
}
void IIPResponse::addResponse( const string& r ){
responseBody.append( r );
responseBody.append( eof );
}
void IIPResponse::addResponse( const char* c ){
responseBody.append( c );
responseBody.append( eof );
}
void IIPResponse::addResponse( const char* c, int a ){
char tmp[64];
snprintf( tmp, 64, "%s:%d", c, a );
responseBody.append( tmp );
responseBody.append( eof );
}
void IIPResponse::addResponse( string arg, const string& s ){
char tmp[8];
snprintf( tmp, 8, "/%d:", (int) s.size() );
responseBody.append( arg );
responseBody.append( tmp );
responseBody.append( s );
responseBody.append( eof );
}
void IIPResponse::addResponse( const char* c, int a, int b ){
char tmp[64];
snprintf( tmp, 64, "%s:%d %d", c, a, b );
responseBody.append( tmp );
responseBody.append( eof );
}
void IIPResponse::setError( const string& code, const string& arg ){
char tmp[32];
snprintf( tmp, 32, "Error/%ld:%s %s", (long)(code.length() + arg.length() + 1), code.c_str(), arg.c_str() );
error += tmp + eof;
}
string IIPResponse::formatResponse() {
/* We always need 2 sets of eof after the headers before body/response
*/
string response;
if( error.length() ){
response = server + eof + "Cache-Control: no-cache" + eof + mimeType + eof;
if( !cors.empty() ) response += cors + eof;
response += "Status: 400 Bad Request" + eof +
"Content-Disposition: inline;filename=\"IIPisAMadGameClosedToOurUnderstanding.netfpx\"" +
eof + eof + error;
}
else{
response = server + eof + powered + eof + cacheControl + eof + modified + eof + mimeType + eof;
if( !cors.empty() ) response += cors + eof;
response += eof + protocol + eof + responseBody;
}
return response;
}
string IIPResponse::getAdvert(){
string advert = server + eof + "Content-Type: text/html" + eof;
advert += "Status: 400 Bad Request" + eof;
advert += "Content-Disposition: inline;filename=\"iipsrv.html\"" + eof + eof;
advert += "<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"utf-8\"/><title>IIPImage Server</title><meta name=\"DC.creator\" content=\"Ruven Pillay <ruven@users.sourceforge.net>\"/><meta name=\"DC.title\" content=\"IIPImage Server\"/><meta name=\"DC.source\" content=\"http://iipimage.sourceforge.net\"/></head><body style=\"font-family:Helvetica,sans-serif; margin:4em\"><center><h1>IIPImage Server</h1><h2>Version "
+ string( VERSION ) +
"</h2><br/><h3>Project Home Page: <a href=\"http://iipimage.sourceforge.net\">http://iipimage.sourceforge.net</a></h3><br/><h4>by<br/>Ruven Pillay</h4></center></body></html>";
return advert;
}
|