git-svn-id: https://svn.middleware.georgetown.edu/cpp-sp/branches/REL_2@3354
cb58f699-b61c-0410-a6fe-
9272a202ed29
#include <shibsp/handler/Handler.h>
#include <shibsp/remoting/ListenerService.h>
#include <shibsp/handler/Handler.h>
#include <shibsp/remoting/ListenerService.h>
namespace xmltooling {
class XMLTOOL_API HTTPRequest;
class XMLTOOL_API HTTPResponse;
namespace xmltooling {
class XMLTOOL_API HTTPRequest;
class XMLTOOL_API HTTPResponse;
*/
class SHIBSP_API RemotedHandler : public virtual Handler, public Remoted
{
*/
class SHIBSP_API RemotedHandler : public virtual Handler, public Remoted
{
+ static std::set<std::string> m_remotedHeaders;
+
public:
virtual ~RemotedHandler();
public:
virtual ~RemotedHandler();
+ /**
+ * Ensures that a request header will be remoted.
+ *
+ * @param header name of request header to remote
+ */
+ static void addRemotedHeader(const char* header);
+
protected:
RemotedHandler();
protected:
RemotedHandler();
* to remote the request information.
*
* @param request an SPRequest to remote
* to remote the request information.
*
* @param request an SPRequest to remote
- * @param headers array of request headers to copy to remote request
+ * @param headers array of additional request headers to copy to remote request
* @param certs true iff client certificates should be available for the remote request
* @return the input dataflow object
*/
* @param certs true iff client certificates should be available for the remote request
* @return the input dataflow object
*/
+set<string> RemotedHandler::m_remotedHeaders;
+
RemotedHandler::RemotedHandler()
{
}
RemotedHandler::RemotedHandler()
{
}
listener->unregListener(m_address.c_str(),this);
}
listener->unregListener(m_address.c_str(),this);
}
+void RemotedHandler::addRemotedHeader(const char* header)
+{
+ m_remotedHeaders.insert(header);
+}
+
DDF RemotedHandler::wrap(const SPRequest& request, const vector<string>* headers, bool certs) const
{
DDF in = DDF(m_address.c_str()).structure();
DDF RemotedHandler::wrap(const SPRequest& request, const vector<string>* headers, bool certs) const
{
DDF in = DDF(m_address.c_str()).structure();
in.addmember("url").unsafe_string(request.getRequestURL());
in.addmember("query").string(request.getQueryString());
in.addmember("url").unsafe_string(request.getRequestURL());
in.addmember("query").string(request.getQueryString());
+ if (headers || !m_remotedHeaders.empty()) {
string hdr;
DDF hin = in.addmember("headers").structure();
string hdr;
DDF hin = in.addmember("headers").structure();
- for (vector<string>::const_iterator h = headers->begin(); h!=headers->end(); ++h) {
- hdr = request.getHeader(h->c_str());
+ if (headers) {
+ for (vector<string>::const_iterator h = headers->begin(); h!=headers->end(); ++h) {
+ hdr = request.getHeader(h->c_str());
+ if (!hdr.empty())
+ hin.addmember(h->c_str()).unsafe_string(hdr.c_str());
+ }
+ }
+ for (set<string>::const_iterator hh = m_remotedHeaders.begin(); hh != m_remotedHeaders.end(); ++hh) {
+ hdr = request.getHeader(hh->c_str());
- hin.addmember(h->c_str()).unsafe_string(hdr.c_str());
+ hin.addmember(hh->c_str()).unsafe_string(hdr.c_str());
#include "SessionCacheEx.h"
#include "TransactionLog.h"
#include "attribute/Attribute.h"
#include "SessionCacheEx.h"
#include "TransactionLog.h"
#include "attribute/Attribute.h"
+#include "handler/RemotedHandler.h"
#include "remoting/ListenerService.h"
#include "util/SPConstants.h"
#include "remoting/ListenerService.h"
#include "util/SPConstants.h"
if (inproc)
m_inprocTimeout = XMLHelper::getAttrInt(e, 900, inprocTimeout);
m_inboundHeader = XMLHelper::getAttrString(e, nullptr, inboundHeader);
if (inproc)
m_inprocTimeout = XMLHelper::getAttrInt(e, 900, inprocTimeout);
m_inboundHeader = XMLHelper::getAttrString(e, nullptr, inboundHeader);
+ if (!m_inboundHeader.empty())
+ RemotedHandler::addRemotedHeader(m_inboundHeader.c_str());
m_outboundHeader = XMLHelper::getAttrString(e, nullptr, outboundHeader);
#ifndef SHIBSP_LITE
m_outboundHeader = XMLHelper::getAttrString(e, nullptr, outboundHeader);
#ifndef SHIBSP_LITE