summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2016-09-17 01:22:55 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2016-09-17 01:22:55 +0100
commite993ddda58e150b1a3e5b04c3e550fd6777ee312 (patch)
tree6c6af6f2594d0f2f0725bcf0cdcc5955c2db9120
parentProper exceptions for handling 404 and 405 (diff)
downloadicespider-e993ddda58e150b1a3e5b04c3e550fd6777ee312.tar.bz2
icespider-e993ddda58e150b1a3e5b04c3e550fd6777ee312.tar.xz
icespider-e993ddda58e150b1a3e5b04c3e550fd6777ee312.zip
Handle 406 with exception
-rw-r--r--icespider/core/core.cpp1
-rw-r--r--icespider/core/core.h1
-rw-r--r--icespider/core/ihttpRequest.cpp3
-rw-r--r--icespider/core/ihttpRequest.h11
-rw-r--r--icespider/unittests/testApp.cpp4
5 files changed, 9 insertions, 11 deletions
diff --git a/icespider/core/core.cpp b/icespider/core/core.cpp
index 211a4da..58619aa 100644
--- a/icespider/core/core.cpp
+++ b/icespider/core/core.cpp
@@ -7,6 +7,7 @@ namespace IceSpider {
DefineHttpEx(Http404_NotFound, 404, "Not found");
DefineHttpEx(Http405_MethodNotAllowed, 405, "Method Not Allowed");
+ DefineHttpEx(Http406_NotAcceptable, 406, "Not Acceptable");
static
bool
diff --git a/icespider/core/core.h b/icespider/core/core.h
index 9b011a5..74c9108 100644
--- a/icespider/core/core.h
+++ b/icespider/core/core.h
@@ -22,6 +22,7 @@
namespace IceSpider {
DeclareHttpEx(Http404_NotFound);
DeclareHttpEx(Http405_MethodNotAllowed);
+ DeclareHttpEx(Http406_NotAcceptable);
class DLL_PUBLIC Core {
public:
diff --git a/icespider/core/ihttpRequest.cpp b/icespider/core/ihttpRequest.cpp
index 9b62507..73da7ae 100644
--- a/icespider/core/ihttpRequest.cpp
+++ b/icespider/core/ihttpRequest.cpp
@@ -1,6 +1,7 @@
#include "ihttpRequest.h"
#include "irouteHandler.h"
#include "util.h"
+#include "core.h"
#include <boost/lexical_cast.hpp>
namespace IceSpider {
@@ -59,7 +60,7 @@ namespace IceSpider {
return serializer;
}
}
- return ContentTypeSerializer();
+ throw Http406_NotAcceptable();
}
else {
return handler->defaultSerializer(getOutputStream());
diff --git a/icespider/core/ihttpRequest.h b/icespider/core/ihttpRequest.h
index 9ce869f..6537ebf 100644
--- a/icespider/core/ihttpRequest.h
+++ b/icespider/core/ihttpRequest.h
@@ -49,14 +49,9 @@ namespace IceSpider {
void response(const IRouteHandler * route, const T & t) const
{
auto s = getSerializer(route);
- if (s.second) {
- getOutputStream() << "Content-Type: " << s.first.group << "/" << s.first.type << "\r\n";
- response(200, "OK");
- Slicer::SerializeAnyWith<T>(t, s.second);
- }
- else {
- response(406, "Unacceptable");
- }
+ getOutputStream() << "Content-Type: " << s.first.group << "/" << s.first.type << "\r\n";
+ response(200, "OK");
+ Slicer::SerializeAnyWith<T>(t, s.second);
}
const Core * core;
diff --git a/icespider/unittests/testApp.cpp b/icespider/unittests/testApp.cpp
index 2a584a4..4e32ddd 100644
--- a/icespider/unittests/testApp.cpp
+++ b/icespider/unittests/testApp.cpp
@@ -358,7 +358,7 @@ BOOST_AUTO_TEST_CASE( testCallViewSomethingAcceptHtml )
requestHtml.hdr["Accept"] = "text/html";
process(&requestHtml);
auto h = parseHeaders(requestHtml.output);
- BOOST_REQUIRE_EQUAL(h["Status"], "406 Unacceptable");
+ BOOST_REQUIRE_EQUAL(h["Status"], "406 Not Acceptable");
requestHtml.output.get();
BOOST_REQUIRE(requestHtml.output.eof());
}
@@ -369,7 +369,7 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptNotSupported )
requestBadAccept.hdr["Accept"] = "not/supported";
process(&requestBadAccept);
auto h = parseHeaders(requestBadAccept.output);
- BOOST_REQUIRE_EQUAL(h["Status"], "406 Unacceptable");
+ BOOST_REQUIRE_EQUAL(h["Status"], "406 Not Acceptable");
requestBadAccept.output.get();
BOOST_REQUIRE(requestBadAccept.output.eof());
}