#ifndef ICESPIDER_IHTTPREQUEST_H #define ICESPIDER_IHTTPREQUEST_H #include #include #include #include #include #include #include #include namespace IceSpider { class Core; class IRouteHandler; typedef std::vector PathElements; typedef Ice::optional OptionalString; typedef std::pair ContentTypeSerializer; class DLL_PUBLIC IHttpRequest { public: IHttpRequest(const Core *); Ice::Context getContext() const; virtual const PathElements & getRequestPath() const = 0; virtual PathElements & getRequestPath() = 0; virtual HttpMethod getRequestMethod() const = 0; const std::string & getURLParam(unsigned int) const; virtual OptionalString getQueryStringParam(const std::string &) const = 0; virtual OptionalString getHeaderParam(const std::string &) const = 0; virtual OptionalString getCookieParam(const std::string &) const = 0; virtual OptionalString getEnv(const std::string &) const = 0; virtual void setQueryStringParam(const std::string &, const OptionalString &) = 0; virtual void setHeaderParam(const std::string &, const OptionalString &) = 0; virtual void setCookieParam(const std::string &, const OptionalString &) = 0; virtual void setEnv(const std::string &, const OptionalString &) = 0; virtual Slicer::DeserializerPtr getDeserializer() const; virtual ContentTypeSerializer getSerializer(const IRouteHandler *) const; virtual std::istream & getInputStream() const = 0; virtual std::ostream & getOutputStream() const = 0; virtual void setHeader(const std::string &, const std::string &) const = 0; virtual std::ostream & dump(std::ostream & s) const = 0; template T getURLParam(unsigned int) const; template Ice::optional getBody() const { return Slicer::DeserializeAnyWith(getDeserializer()); } template Ice::optional getBodyParam(const Ice::optional & map, const std::string & key) const { if (!map) { return Ice::optional(); } auto i = map->find(key); if (i == map->end()) { return Ice::optional(); } else { return boost::lexical_cast(i->second); } } void responseRedirect(const std::string & url, const Ice::optional & = IceUtil::None) const; void setCookie(const std::string &, const std::string &, const Ice::optional & = IceUtil::None, const Ice::optional & = IceUtil::None, bool = false, Ice::optional = IceUtil::None); template void setCookie(const std::string &, const T &, const Ice::optional & = IceUtil::None, const Ice::optional & = IceUtil::None, bool = false, Ice::optional = IceUtil::None); template Ice::optional getQueryStringParam(const std::string & key) const; template Ice::optional getHeaderParam(const std::string & key) const; template Ice::optional getCookieParam(const std::string & key) const; virtual void response(short, const std::string &) const = 0; template void response(const IRouteHandler * route, const T & t) const { modelPartResponse(route, Slicer::ModelPart::CreateRootFor(t)); } void modelPartResponse(const IRouteHandler * route, const Slicer::ModelPartForRootPtr &) const; const Core * core; }; } #endif