X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=shibsp%2FServiceProvider.h;h=f3003c4017e6e900a91ef133c60b3bbd74c6688b;hb=46aa7d5402d02d489a248c152c74cc69322521a2;hp=d4026fe47447335a6cf6e2d2dad077bbe52f6ef8;hpb=f3e141df19a3307d6555481c45c5173a5bb5d485;p=shibboleth%2Fsp.git diff --git a/shibsp/ServiceProvider.h b/shibsp/ServiceProvider.h index d4026fe..f3003c4 100644 --- a/shibsp/ServiceProvider.h +++ b/shibsp/ServiceProvider.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2007 Internet2 + * Copyright 2001-2010 Internet2 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,20 +24,34 @@ #define __shibsp_sp_h__ #include -#include -#include -#include + +#include + +namespace xmltooling { + class XMLTOOL_API SOAPTransport; + class XMLTOOL_API StorageService; +}; + +#ifndef SHIBSP_LITE +namespace opensaml { + class SAML_API SecurityPolicyRule; +}; +#endif namespace shibsp { class SHIBSP_API Application; class SHIBSP_API Handler; class SHIBSP_API ListenerService; + class SHIBSP_API Remoted; class SHIBSP_API RequestMapper; class SHIBSP_API SessionCache; class SHIBSP_API SPRequest; class SHIBSP_API TemplateParameters; +#ifndef SHIBSP_LITE + class SHIBSP_API SecurityPolicyProvider; class SHIBSP_API TransactionLog; +#endif /** * Interface to a Shibboleth ServiceProvider instance. @@ -49,9 +63,9 @@ namespace shibsp { { MAKE_NONCOPYABLE(ServiceProvider); protected: - ServiceProvider() {} + ServiceProvider(); public: - virtual ~ServiceProvider() {} + virtual ~ServiceProvider(); /** * Loads a configuration and prepares the instance for use. @@ -62,6 +76,7 @@ namespace shibsp { */ virtual void init()=0; +#ifndef SHIBSP_LITE /** * Returns a TransactionLog instance. * @@ -72,10 +87,11 @@ namespace shibsp { /** * Returns a StorageService instance based on an ID. * - * @param id a NULL-terminated key identifying the StorageService to the configuration - * @return a StorageService if available, or NULL + * @param id a nullptr-terminated key identifying the StorageService to the configuration + * @return a StorageService if available, or nullptr */ virtual xmltooling::StorageService* getStorageService(const char* id) const=0; +#endif /** * Returns a SessionCache instance. @@ -93,35 +109,55 @@ namespace shibsp { */ virtual ListenerService* getListenerService(bool required=true) const=0; +#ifndef SHIBSP_LITE /** - * Returns a CredentialResolver instance mapped to a key. - * - * @param id a NULL-terminated key identifying the CredentialResolver to the configuration - * @return a CredentialResolver if available, or NULL + * Returns a SecurityPolicyProvider instance. + * + * @param required true iff an exception should be thrown if no SecurityPolicyProvider is available + * @return a SecurityPolicyProvider */ - virtual xmlsignature::CredentialResolver* getCredentialResolver(const char* id) const=0; + virtual SecurityPolicyProvider* getSecurityPolicyProvider(bool required=true) const; /** + * @deprecated + * Returns the security policy settings for an identified policy. + * + * @param id identifies the policy to return, or nullptr for default + * @return a PropertySet + */ + virtual const PropertySet* getPolicySettings(const char* id) const=0; + + /** + * @deprecated * Returns the security policy rules for an identified policy. * - * @param id identifies the policy rules to return, or NULL for the default policy + * @param id identifies the policy to return, or nullptr for default * @return an array of policy rules */ - virtual std::vector& getPolicyRules(const char* id=NULL) const=0; + virtual const std::vector& getPolicyRules(const char* id) const=0; + + /** + * Sets implementation-specific transport options. + * + * @param transport a SOAPTransport object + * @return true iff all options were successfully set + */ + virtual bool setTransportOptions(xmltooling::SOAPTransport& transport) const=0; +#endif /** * Returns a RequestMapper instance. * * @param required true iff an exception should be thrown if no RequestMapper is available - * @param a RequestMapper + * @return a RequestMapper */ virtual RequestMapper* getRequestMapper(bool required=true) const=0; /** * Returns an Application instance matching the specified ID. * - * @param applicationId the ID of the application - * @return pointer to the application, or NULL + * @param applicationId the ID of the application, or nullptr for the default + * @return pointer to the application, or nullptr */ virtual const Application* getApplication(const char* applicationId) const=0; @@ -170,6 +206,36 @@ namespace shibsp { * @return a pair containing a "request completed" indicator and a server-specific response code */ virtual std::pair doHandler(SPRequest& request) const; + + /** + * Register for a message. Returns existing remote service, allowing message hooking. + * + * @param address message address to register + * @param svc pointer to remote service + * @return previous service registered for message, if any + */ + virtual Remoted* regListener(const char* address, Remoted* svc); + + /** + * Unregisters service from an address, possibly restoring an original. + * + * @param address message address to modify + * @param current pointer to unregistering service + * @param restore service to "restore" registration for + * @return true iff the current service was still registered + */ + virtual bool unregListener(const char* address, Remoted* current, Remoted* restore=nullptr); + + /** + * Returns current service registered at an address, if any. + * + * @param address message address to access + * @return registered service, or nullptr + */ + virtual Remoted* lookupListener(const char* address) const; + + private: + std::map m_listenerMap; }; /**