summaryrefslogtreecommitdiff
path: root/icespider/fcgi/cgiRequestBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'icespider/fcgi/cgiRequestBase.cpp')
-rw-r--r--icespider/fcgi/cgiRequestBase.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/icespider/fcgi/cgiRequestBase.cpp b/icespider/fcgi/cgiRequestBase.cpp
index 97a71fc..ec9836b 100644
--- a/icespider/fcgi/cgiRequestBase.cpp
+++ b/icespider/fcgi/cgiRequestBase.cpp
@@ -1,6 +1,7 @@
#include "cgiRequestBase.h"
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/classification.hpp>
#include <util.h>
namespace ba = boost::algorithm;
@@ -26,6 +27,15 @@ namespace IceSpider {
void
CgiRequestBase::initialize()
{
+ namespace ba = boost::algorithm;
+ auto path = (optionalLookup("REDIRECT_URL", envmap) /
+ [this]() { return optionalLookup("SCRIPT_NAME", envmap); } /
+ [this]() -> std::string { throw std::runtime_error("Couldn't determine request path"); })
+ .substr(1);
+ if (!path.empty()) {
+ ba::split(pathmap, path, ba::is_any_of("/"), ba::token_compress_off);
+ }
+
auto qs = envmap.find("QUERY_STRING");
if (qs != envmap.end()) {
auto start = std::get<0>(qs->second);
@@ -58,12 +68,10 @@ namespace IceSpider {
return std::string(std::get<0>(i->second), std::get<1>(i->second));
}
- std::string
+ const std::vector<std::string> &
CgiRequestBase::getRequestPath() const
{
- return optionalLookup("REDIRECT_URL", envmap) /
- [this]() { return optionalLookup("SCRIPT_NAME", envmap); } /
- [this]() -> std::string { throw std::runtime_error("Couldn't determine request path"); };
+ return pathmap;
}
UserIceSpider::HttpMethod
@@ -73,12 +81,6 @@ namespace IceSpider {
}
IceUtil::Optional<std::string>
- CgiRequestBase::getURLParam(const std::string & key) const
- {
- return optionalLookup(key, pathmap);
- }
-
- IceUtil::Optional<std::string>
CgiRequestBase::getQueryStringParam(const std::string & key) const
{
return optionalLookup(key, qsmap);