Update copyright.
[shibboleth/cpp-opensaml.git] / saml / binding / SOAPClient.h
1 /*
2  *  Copyright 2001-2007 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/binding/SecurityPolicy.h>
27 #include <xmltooling/soap/SOAPClient.h>
28
29 namespace opensaml {
30
31     /**
32      * Specialized SOAPClient for SAML SOAP bindings.
33      */
34     class SAML_API SOAPClient : soap11::SOAPClient
35     {
36     public:
37         /**
38          * Creates a SOAP client instance with a particular SecurityPolicy.
39          * 
40          * @param policy    reference to SecurityPolicy to apply
41          */
42         SOAPClient(SecurityPolicy& policy) : m_policy(policy), m_force(true) {}
43         
44         virtual ~SOAPClient() {}
45
46         /**
47          * Controls whether to force transport/peer authentication via an X509TrustEngine.
48          * 
49          * <p>Only makes sense if an X509TrustEngine is supplied by the SecurityPolicy. 
50          * 
51          * @param force  true iff the client should refuse to communicate without this protection
52          */
53         void forceTransportAuthentication(bool force=true) {
54             m_force = force;
55         }
56         
57         /**
58          * Override prepares the SecurityPolicy by clearing Issuer identity, in case the policy
59          * is reused.
60          * 
61          * @param env       SOAP envelope to send
62          * @param peer      peer to send message to, expressed in TrustEngine terms
63          * @param endpoint  URL of endpoint to recieve message
64          */
65         void send(const soap11::Envelope* env, const xmltooling::KeyInfoSource& peer, const char* endpoint);
66         
67         /**
68          * Override applies SecurityPolicy to envelope before returning it.
69          * 
70          * @return response envelope after SecurityPolicy has been applied
71          */
72         soap11::Envelope* receive();
73
74     protected:
75         /**
76          * Override prepares transport by assigning an X509TrustEngine to it, if one is
77          * attached to the policy.
78          * 
79          * @param transport reference to transport layer
80          */
81         void prepareTransport(const xmltooling::SOAPTransport& transport);
82         
83         /** Reference to security policy to apply. */
84         SecurityPolicy& m_policy;
85         
86         /** Flag controlling whether transport/peer authn is mandatory. */
87         bool m_force;
88     
89     private:
90         const saml2md::RoleDescriptor* m_peer;
91     };
92
93 };
94
95 #endif /* __saml_soap11client_h__ */