Reducing header overuse, non-inlining selected methods (CPPOST-35).
[shibboleth/cpp-opensaml.git] / saml / binding / SOAPClient.h
1 /*
2  *  Copyright 2001-2009 Internet2
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**
18  * @file saml/binding/SOAPClient.h
19  * 
20  * Specialized SOAPClient for SAML SOAP bindings.
21  */
22
23 #ifndef __saml_soap11client_h__
24 #define __saml_soap11client_h__
25
26 #include <saml/base.h>
27
28 #include <xmltooling/soap/SOAPClient.h>
29
30 namespace opensaml {
31
32     class SAML_API SecurityPolicy;
33     namespace saml2md {
34         class SAML_API MetadataCredentialCriteria;
35     };
36
37     /**
38      * Specialized SOAPClient for SAML SOAP bindings.
39      */
40     class SAML_API SOAPClient : public soap11::SOAPClient
41     {
42     public:
43         /**
44          * Creates a SOAP client instance with a particular SecurityPolicy.
45          * 
46          * @param policy        reference to SecurityPolicy to apply
47          */
48         SOAPClient(SecurityPolicy& policy);
49         
50         virtual ~SOAPClient();
51
52         /**
53          * Controls whether to force transport/peer authentication via an X509TrustEngine.
54          * 
55          * <p>Only makes sense if an X509TrustEngine is supplied by the SecurityPolicy. 
56          * 
57          * @param force  true iff the client should refuse to communicate without this protection
58          */
59         void forceTransportAuthentication(bool force=true);
60         
61         using soap11::SOAPClient::send;
62
63         /**
64          * SAML-specific method uses metadata to determine the peer name and prepare the
65          * transport layer with peer credential information. The SecurityPolicy is also reset,
66          * in case the policy is reused.
67          * 
68          * @param env       SOAP envelope to send
69          * @param from      identity of sending application
70          * @param to        peer to send message to, expressed in metadata criteria terms
71          * @param endpoint  URL of endpoint to recieve message
72          */
73         virtual void send(const soap11::Envelope& env, const char* from, saml2md::MetadataCredentialCriteria& to, const char* endpoint);
74         
75         /**
76          * Override applies SecurityPolicy to envelope before returning it.
77          * 
78          * @return response envelope after SecurityPolicy has been applied
79          */
80         soap11::Envelope* receive();
81         
82         void reset();
83
84         /**
85          * Returns the SecurityPolicy supplied to the client.
86          *
87          * @return  the associated SecurityPolicy
88          */
89         SecurityPolicy& getPolicy() const;
90
91     protected:
92         /**
93          * Override prepares transport by assigning an X509TrustEngine to it, if one is
94          * attached to the policy.
95          * 
96          * @param transport reference to transport layer
97          */
98         void prepareTransport(xmltooling::SOAPTransport& transport);
99         
100         /** Reference to security policy to apply. */
101         SecurityPolicy& m_policy;
102         
103         /** Flag controlling whether transport/peer authn is mandatory. */
104         bool m_force;
105     
106         /** Metadata-based peer identity. */        
107         const saml2md::RoleDescriptor* m_peer;
108
109         /** Metadata-based CredentialCriteria for supplying credentials to TrustEngine. */
110         saml2md::MetadataCredentialCriteria* m_criteria;
111     };
112
113 };
114
115 #endif /* __saml_soap11client_h__ */