1 kumpf 1.1 //%/////////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,
4 // The Open Group, Tivoli Systems
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // of this software and associated documentation files (the "Software"), to
8 // deal in the Software without restriction, including without limitation the
9 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 // sell copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
12 //
13 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
14 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
15 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
16 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
17 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 //
22 kumpf 1.1 //==============================================================================
23 //
24 // Author: Jair Santos, Hewlett-Packard Company (jair.santos@hp.com)
25 //
26 // Modified By:
27 //
28 //%/////////////////////////////////////////////////////////////////////////////
29
30 #ifndef Pegasus_ClientRep_h
31 #define Pegasus_ClientRep_h
32
33 #include <Pegasus/Common/Config.h>
34 #include <Pegasus/Common/String.h>
35 #include <Pegasus/Common/CIMName.h>
36 #include <Pegasus/Common/SSLContext.h>
37 #include <Pegasus/Common/CIMObject.h>
38 #include <Pegasus/Common/CIMClass.h>
39 #include <Pegasus/Common/CIMInstance.h>
40 #include <Pegasus/Common/CIMObjectPath.h>
41 #include <Pegasus/Common/CIMValue.h>
42 #include <Pegasus/Common/CIMParamValue.h>
43 kumpf 1.1 #include <Pegasus/Common/CIMPropertyList.h>
44 #include <Pegasus/Common/CIMQualifierDecl.h>
45 #include <Pegasus/Common/Exception.h>
46 #include <Pegasus/Common/Constants.h>
47 #include <Pegasus/Common/FileSystem.h>
48 #include <Pegasus/Common/Monitor.h>
49 #include <Pegasus/Common/HTTPConnector.h>
50 #include <Pegasus/Common/CIMMessage.h>
51 #include <Pegasus/Common/HTTPConnection.h>
52 #include <Pegasus/Common/Destroyer.h>
53 #include <Pegasus/Common/XmlWriter.h>
54 #include <Pegasus/Common/TimeValue.h>
55 #include <Pegasus/Common/PegasusVersion.h>
56 #include <Pegasus/Client/CIMClientException.h>
57 #include <Pegasus/Client/Linkage.h>
58 #include <Pegasus/Client/CIMClientInterface.h>
59
60 #include "CIMOperationResponseDecoder.h"
61 #include "CIMOperationRequestEncoder.h"
62 #include "ClientAuthenticator.h"
63
64 kumpf 1.1 PEGASUS_NAMESPACE_BEGIN
65
66 ///////////////////////////////////////////////////////////////////////////////
67 //
68 // CIMClientRep
69 //
70 ///////////////////////////////////////////////////////////////////////////////
71 class CIMClientRep : public CIMClientInterface
72 {
73 public:
74
75 // Timeout value defines the time the CIMClient will wait for a response
76 // to an outstanding request. If a request times out, the connection
77 // gets reset (disconnected and reconnected).
78 CIMClientRep(Uint32 timeoutMilliseconds = DEFAULT_TIMEOUT_MILLISECONDS);
79
80 ~CIMClientRep();
81
82 virtual void handleEnqueue();
83
84 virtual Uint32 getTimeout() const
85 kumpf 1.1 {
86 return _timeoutMilliseconds;
87 }
88
89 virtual void setTimeout(Uint32 timeoutMilliseconds)
90 {
91 _timeoutMilliseconds = timeoutMilliseconds;
92 }
93
94 // l10n start
95 AcceptLanguages getRequestAcceptLanguages() const;
96 ContentLanguages getRequestContentLanguages() const;
97 ContentLanguages getResponseContentLanguages() const;
98 void setRequestAcceptLanguages(AcceptLanguages& langs);
99 void setRequestContentLanguages(ContentLanguages& langs);
100 void setRequestDefaultLanguages();
101 // l10n end
102
103 void connect(
104 const String& host,
105 const Uint32 portNumber,
106 kumpf 1.1 const String& userName,
107 const String& password
108 );
109
110 void connect(
111 const String& host,
112 const Uint32 portNumber,
113 const SSLContext& sslContext,
114 const String& userName,
115 const String& password
116 );
117
118 void connectLocal();
119
120 void disconnect();
121
122 virtual CIMClass getClass(
123 const CIMNamespaceName& nameSpace,
124 const CIMName& className,
125 Boolean localOnly = true,
126 Boolean includeQualifiers = true,
127 kumpf 1.1 Boolean includeClassOrigin = false,
128 const CIMPropertyList& propertyList = CIMPropertyList()
129 );
130
131 virtual CIMInstance getInstance(
132 const CIMNamespaceName& nameSpace,
133 const CIMObjectPath& instanceName,
134 Boolean localOnly = true,
135 Boolean includeQualifiers = false,
136 Boolean includeClassOrigin = false,
137 const CIMPropertyList& propertyList = CIMPropertyList()
138 );
139
140 virtual void deleteClass(
141 const CIMNamespaceName& nameSpace,
142 const CIMName& className
143 );
144
145 virtual void deleteInstance(
146 const CIMNamespaceName& nameSpace,
147 const CIMObjectPath& instanceName
148 kumpf 1.1 );
149
150 virtual void createClass(
151 const CIMNamespaceName& nameSpace,
152 const CIMClass& newClass
153 );
154
155 virtual CIMObjectPath createInstance(
156 const CIMNamespaceName& nameSpace,
157 const CIMInstance& newInstance
158 );
159
160 virtual void modifyClass(
161 const CIMNamespaceName& nameSpace,
162 const CIMClass& modifiedClass
163 );
164
165 virtual void modifyInstance(
166 const CIMNamespaceName& nameSpace,
167 const CIMInstance& modifiedInstance,
168 Boolean includeQualifiers = true,
169 kumpf 1.1 const CIMPropertyList& propertyList = CIMPropertyList()
170 );
171
172 virtual Array<CIMClass> enumerateClasses(
173 const CIMNamespaceName& nameSpace,
174 const CIMName& className = CIMName(),
175 Boolean deepInheritance = false,
176 Boolean localOnly = true,
177 Boolean includeQualifiers = true,
178 Boolean includeClassOrigin = false
179 );
180
181 virtual Array<CIMName> enumerateClassNames(
182 const CIMNamespaceName& nameSpace,
183 const CIMName& className = CIMName(),
184 Boolean deepInheritance = false
185 );
186
187 virtual Array<CIMInstance> enumerateInstances(
188 const CIMNamespaceName& nameSpace,
189 const CIMName& className,
190 kumpf 1.1 Boolean deepInheritance = true,
191 Boolean localOnly = true,
192 Boolean includeQualifiers = false,
193 Boolean includeClassOrigin = false,
194 const CIMPropertyList& propertyList = CIMPropertyList()
195 );
196
197 virtual Array<CIMObjectPath> enumerateInstanceNames(
198 const CIMNamespaceName& nameSpace,
199 const CIMName& className
200 );
201
202 virtual Array<CIMObject> execQuery(
203 const CIMNamespaceName& nameSpace,
204 const String& queryLanguage,
205 const String& query
206 );
207
208 virtual Array<CIMObject> associators(
209 const CIMNamespaceName& nameSpace,
210 const CIMObjectPath& objectName,
211 kumpf 1.1 const CIMName& assocClass = CIMName(),
212 const CIMName& resultClass = CIMName(),
213 const String& role = String::EMPTY,
214 const String& resultRole = String::EMPTY,
215 Boolean includeQualifiers = false,
216 Boolean includeClassOrigin = false,
217 const CIMPropertyList& propertyList = CIMPropertyList()
218 );
219
220 virtual Array<CIMObjectPath> associatorNames(
221 const CIMNamespaceName& nameSpace,
222 const CIMObjectPath& objectName,
223 const CIMName& assocClass = CIMName(),
224 const CIMName& resultClass = CIMName(),
225 const String& role = String::EMPTY,
226 const String& resultRole = String::EMPTY
227 );
228
229 virtual Array<CIMObject> references(
230 const CIMNamespaceName& nameSpace,
231 const CIMObjectPath& objectName,
232 kumpf 1.1 const CIMName& resultClass = CIMName(),
233 const String& role = String::EMPTY,
234 Boolean includeQualifiers = false,
235 Boolean includeClassOrigin = false,
236 const CIMPropertyList& propertyList = CIMPropertyList()
237 );
238
239 virtual Array<CIMObjectPath> referenceNames(
240 const CIMNamespaceName& nameSpace,
241 const CIMObjectPath& objectName,
242 const CIMName& resultClass = CIMName(),
243 const String& role = String::EMPTY
244 );
245
246 virtual CIMValue getProperty(
247 const CIMNamespaceName& nameSpace,
248 const CIMObjectPath& instanceName,
249 const CIMName& propertyName
250 );
251
252 virtual void setProperty(
253 kumpf 1.1 const CIMNamespaceName& nameSpace,
254 const CIMObjectPath& instanceName,
255 const CIMName& propertyName,
256 const CIMValue& newValue = CIMValue()
257 );
258
259 virtual CIMQualifierDecl getQualifier(
260 const CIMNamespaceName& nameSpace,
261 const CIMName& qualifierName
262 );
263
264 virtual void setQualifier(
265 const CIMNamespaceName& nameSpace,
266 const CIMQualifierDecl& qualifierDeclaration
267 );
268
269 virtual void deleteQualifier(
270 const CIMNamespaceName& nameSpace,
271 const CIMName& qualifierName
272 );
273
274 kumpf 1.1 virtual Array<CIMQualifierDecl> enumerateQualifiers(
275 const CIMNamespaceName& nameSpace
276 );
277
278 virtual CIMValue invokeMethod(
279 const CIMNamespaceName& nameSpace,
280 const CIMObjectPath& instanceName,
281 const CIMName& methodName,
282 const Array<CIMParamValue>& inParameters,
283 Array<CIMParamValue>& outParameters
284 );
285
286 private:
287
288 void _connect();
289
290 void _reconnect();
291
292 Message* _doRequest(
293 CIMRequestMessage * request,
294 const Uint32 expectedResponseMessageType);
295 kumpf 1.1
296 String _getLocalHostName();
297
298 Monitor* _monitor;
299 HTTPConnector* _httpConnector;
300 HTTPConnection* _httpConnection;
301 Uint32 _timeoutMilliseconds;
302 Boolean _connected;
303 CIMOperationResponseDecoder* _responseDecoder;
304 CIMOperationRequestEncoder* _requestEncoder;
305 ClientAuthenticator _authenticator;
306 String _connectHost;
307 Uint32 _connectPortNumber;
308 SSLContext* _connectSSLContext;
309
310 // l10n
311 AcceptLanguages requestAcceptLanguages;
312 ContentLanguages requestContentLanguages;
313 ContentLanguages responseContentLanguages;
314 };
315
316 kumpf 1.1 PEGASUS_NAMESPACE_END
317
318 #endif /* Pegasus_ClientRep_h */
|