1 mike 1.27 //%/////////////////////////////////////////////////////////////////////////////
2 //
|
3 kumpf 1.62 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,
|
4 mike 1.31 // The Open Group, Tivoli Systems
|
5 mike 1.27 //
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 kumpf 1.62 //
|
13 mike 1.27 // 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 //==============================================================================
23 //
24 // Author: Mike Brasher (mbrasher@bmc.com)
25 //
|
26 mike 1.31 // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
27 // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
28 // Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
29 // Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
|
30 kumpf 1.60 // Carol Ann Krug Graves, Hewlett-Packard Company
31 // (carolann_graves@hp.com)
|
32 mike 1.27 //
33 //%/////////////////////////////////////////////////////////////////////////////
34
35 #include <Pegasus/Common/Config.h>
|
36 kumpf 1.47 #include <Pegasus/Common/Constants.h>
|
37 kumpf 1.63 #include <Pegasus/Common/FileSystem.h>
|
38 kumpf 1.54 #include <Pegasus/Common/Monitor.h>
39 #include <Pegasus/Common/HTTPConnector.h>
40 #include <Pegasus/Common/CIMMessage.h>
|
41 mike 1.31 #include <Pegasus/Common/HTTPConnection.h>
42 #include <Pegasus/Common/Destroyer.h>
|
43 mike 1.27 #include <Pegasus/Common/XmlWriter.h>
44 #include <Pegasus/Common/TimeValue.h>
|
45 kumpf 1.50 #include <Pegasus/Common/PegasusVersion.h>
46
|
47 mike 1.31 #include "CIMOperationResponseDecoder.h"
48 #include "CIMOperationRequestEncoder.h"
|
49 kumpf 1.54 #include "ClientAuthenticator.h"
|
50 mike 1.27 #include "CIMClient.h"
51
52 #include <iostream>
|
53 kumpf 1.78 #include <fstream>
|
54 kumpf 1.33 #ifdef PEGASUS_PLATFORM_WIN32_IX86_MSVC
|
55 mday 1.37 # include <windows.h>
|
56 kumpf 1.33 #else
57 # include <netinet/in.h>
58 # include <arpa/inet.h>
59 # include <sys/socket.h>
60 #endif
|
61 mike 1.27
62 PEGASUS_USING_STD;
63
64 PEGASUS_NAMESPACE_BEGIN
65
|
66 kumpf 1.54 ///////////////////////////////////////////////////////////////////////////////
67 //
68 // CIMClientRep
69 //
70 ///////////////////////////////////////////////////////////////////////////////
71
72 class CIMClientRep : public MessageQueue
73 {
74 public:
75
76 enum { DEFAULT_TIMEOUT_MILLISECONDS = 20000 };
77
|
78 kumpf 1.55 // Timeout value defines the time the CIMClient will wait for a response
79 // to an outstanding request. If a request times out, the connection
80 // gets reset (disconnected and reconnected).
|
81 kumpf 1.68 CIMClientRep(Uint32 timeoutMilliseconds = DEFAULT_TIMEOUT_MILLISECONDS);
|
82 kumpf 1.54
83 ~CIMClientRep();
84
85 virtual void handleEnqueue();
86
|
87 kumpf 1.68 Uint32 getTimeout() const
|
88 kumpf 1.54 {
|
89 kumpf 1.68 return _timeoutMilliseconds;
|
90 kumpf 1.54 }
91
|
92 kumpf 1.68 void setTimeout(Uint32 timeoutMilliseconds)
|
93 kumpf 1.54 {
|
94 kumpf 1.68 _timeoutMilliseconds = timeoutMilliseconds;
|
95 kumpf 1.54 }
96
|
97 kumpf 1.70 void connect(
|
98 kumpf 1.75 const String& host,
99 const Uint32 portNumber,
|
100 kumpf 1.72 const String& userName,
101 const String& password
|
102 kumpf 1.70 );
|
103 kumpf 1.54
104 void connect(
|
105 kumpf 1.75 const String& host,
106 const Uint32 portNumber,
|
107 kumpf 1.70 const SSLContext& sslContext,
|
108 kumpf 1.72 const String& userName,
109 const String& password
|
110 kumpf 1.65 );
|
111 kumpf 1.54
|
112 kumpf 1.65 void connectLocal();
|
113 kumpf 1.54
114 void disconnect();
115
116 virtual CIMClass getClass(
|
117 kumpf 1.64 const CIMNamespaceName& nameSpace,
118 const CIMName& className,
|
119 kumpf 1.54 Boolean localOnly = true,
120 Boolean includeQualifiers = true,
121 Boolean includeClassOrigin = false,
122 const CIMPropertyList& propertyList = CIMPropertyList()
|
123 kumpf 1.65 );
|
124 kumpf 1.54
125 virtual CIMInstance getInstance(
|
126 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
127 kumpf 1.56 const CIMObjectPath& instanceName,
|
128 kumpf 1.54 Boolean localOnly = true,
129 Boolean includeQualifiers = false,
130 Boolean includeClassOrigin = false,
131 const CIMPropertyList& propertyList = CIMPropertyList()
|
132 kumpf 1.65 );
|
133 kumpf 1.54
134 virtual void deleteClass(
|
135 kumpf 1.64 const CIMNamespaceName& nameSpace,
136 const CIMName& className
|
137 kumpf 1.65 );
|
138 kumpf 1.54
139 virtual void deleteInstance(
|
140 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
141 kumpf 1.56 const CIMObjectPath& instanceName
|
142 kumpf 1.65 );
|
143 kumpf 1.54
144 virtual void createClass(
|
145 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
146 kumpf 1.54 const CIMClass& newClass
|
147 kumpf 1.65 );
|
148 kumpf 1.54
|
149 kumpf 1.56 virtual CIMObjectPath createInstance(
|
150 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
151 kumpf 1.54 const CIMInstance& newInstance
|
152 kumpf 1.65 );
|
153 kumpf 1.54
154 virtual void modifyClass(
|
155 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
156 kumpf 1.54 const CIMClass& modifiedClass
|
157 kumpf 1.65 );
|
158 kumpf 1.54
159 virtual void modifyInstance(
|
160 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
161 kumpf 1.60 const CIMInstance& modifiedInstance,
|
162 kumpf 1.54 Boolean includeQualifiers = true,
163 const CIMPropertyList& propertyList = CIMPropertyList()
|
164 kumpf 1.65 );
|
165 kumpf 1.54
166 virtual Array<CIMClass> enumerateClasses(
|
167 kumpf 1.64 const CIMNamespaceName& nameSpace,
168 const CIMName& className = CIMName(),
|
169 kumpf 1.54 Boolean deepInheritance = false,
170 Boolean localOnly = true,
171 Boolean includeQualifiers = true,
172 Boolean includeClassOrigin = false
|
173 kumpf 1.65 );
|
174 kumpf 1.54
|
175 kumpf 1.64 virtual Array<CIMName> enumerateClassNames(
176 const CIMNamespaceName& nameSpace,
177 const CIMName& className = CIMName(),
|
178 kumpf 1.54 Boolean deepInheritance = false
|
179 kumpf 1.65 );
|
180 kumpf 1.54
|
181 kumpf 1.60 virtual Array<CIMInstance> enumerateInstances(
|
182 kumpf 1.64 const CIMNamespaceName& nameSpace,
183 const CIMName& className,
|
184 kumpf 1.54 Boolean deepInheritance = true,
185 Boolean localOnly = true,
186 Boolean includeQualifiers = false,
187 Boolean includeClassOrigin = false,
188 const CIMPropertyList& propertyList = CIMPropertyList()
|
189 kumpf 1.65 );
|
190 kumpf 1.54
|
191 kumpf 1.56 virtual Array<CIMObjectPath> enumerateInstanceNames(
|
192 kumpf 1.64 const CIMNamespaceName& nameSpace,
193 const CIMName& className
|
194 kumpf 1.65 );
|
195 kumpf 1.54
|
196 kumpf 1.61 virtual Array<CIMObject> execQuery(
|
197 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
198 kumpf 1.54 const String& queryLanguage,
199 const String& query
|
200 kumpf 1.65 );
|
201 kumpf 1.54
|
202 kumpf 1.61 virtual Array<CIMObject> associators(
|
203 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
204 kumpf 1.56 const CIMObjectPath& objectName,
|
205 kumpf 1.64 const CIMName& assocClass = CIMName(),
206 const CIMName& resultClass = CIMName(),
|
207 kumpf 1.54 const String& role = String::EMPTY,
208 const String& resultRole = String::EMPTY,
209 Boolean includeQualifiers = false,
210 Boolean includeClassOrigin = false,
211 const CIMPropertyList& propertyList = CIMPropertyList()
|
212 kumpf 1.65 );
|
213 kumpf 1.54
|
214 kumpf 1.56 virtual Array<CIMObjectPath> associatorNames(
|
215 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
216 kumpf 1.56 const CIMObjectPath& objectName,
|
217 kumpf 1.64 const CIMName& assocClass = CIMName(),
218 const CIMName& resultClass = CIMName(),
|
219 kumpf 1.54 const String& role = String::EMPTY,
220 const String& resultRole = String::EMPTY
|
221 kumpf 1.65 );
|
222 kumpf 1.54
|
223 kumpf 1.61 virtual Array<CIMObject> references(
|
224 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
225 kumpf 1.56 const CIMObjectPath& objectName,
|
226 kumpf 1.64 const CIMName& resultClass = CIMName(),
|
227 kumpf 1.54 const String& role = String::EMPTY,
228 Boolean includeQualifiers = false,
229 Boolean includeClassOrigin = false,
230 const CIMPropertyList& propertyList = CIMPropertyList()
|
231 kumpf 1.65 );
|
232 kumpf 1.54
|
233 kumpf 1.56 virtual Array<CIMObjectPath> referenceNames(
|
234 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
235 kumpf 1.56 const CIMObjectPath& objectName,
|
236 kumpf 1.64 const CIMName& resultClass = CIMName(),
|
237 kumpf 1.54 const String& role = String::EMPTY
|
238 kumpf 1.65 );
|
239 kumpf 1.54
240 virtual CIMValue getProperty(
|
241 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
242 kumpf 1.56 const CIMObjectPath& instanceName,
|
243 kumpf 1.64 const CIMName& propertyName
|
244 kumpf 1.65 );
|
245 kumpf 1.54
246 virtual void setProperty(
|
247 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
248 kumpf 1.56 const CIMObjectPath& instanceName,
|
249 kumpf 1.64 const CIMName& propertyName,
|
250 kumpf 1.54 const CIMValue& newValue = CIMValue()
|
251 kumpf 1.65 );
|
252 kumpf 1.54
253 virtual CIMQualifierDecl getQualifier(
|
254 kumpf 1.64 const CIMNamespaceName& nameSpace,
255 const CIMName& qualifierName
|
256 kumpf 1.65 );
|
257 kumpf 1.54
258 virtual void setQualifier(
|
259 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
260 kumpf 1.54 const CIMQualifierDecl& qualifierDeclaration
|
261 kumpf 1.65 );
|
262 kumpf 1.54
263 virtual void deleteQualifier(
|
264 kumpf 1.64 const CIMNamespaceName& nameSpace,
265 const CIMName& qualifierName
|
266 kumpf 1.65 );
|
267 kumpf 1.54
268 virtual Array<CIMQualifierDecl> enumerateQualifiers(
|
269 kumpf 1.64 const CIMNamespaceName& nameSpace
|
270 kumpf 1.65 );
|
271 kumpf 1.54
272 virtual CIMValue invokeMethod(
|
273 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
274 kumpf 1.56 const CIMObjectPath& instanceName,
|
275 kumpf 1.64 const CIMName& methodName,
|
276 kumpf 1.54 const Array<CIMParamValue>& inParameters,
277 Array<CIMParamValue>& outParameters
|
278 kumpf 1.65 );
|
279 kumpf 1.54
280 private:
281
|
282 kumpf 1.70 void _connect();
|
283 kumpf 1.54
|
284 kumpf 1.65 void _reconnect();
|
285 kumpf 1.55
|
286 kumpf 1.54 Message* _doRequest(
287 CIMRequestMessage * request,
|
288 kumpf 1.65 const Uint32 expectedResponseMessageType);
|
289 kumpf 1.54
290 String _getLocalHostName();
291
292 Monitor* _monitor;
293 HTTPConnector* _httpConnector;
294 HTTPConnection* _httpConnection;
|
295 kumpf 1.68 Uint32 _timeoutMilliseconds;
|
296 kumpf 1.54 Boolean _connected;
297 CIMOperationResponseDecoder* _responseDecoder;
298 CIMOperationRequestEncoder* _requestEncoder;
299 ClientAuthenticator _authenticator;
|
300 kumpf 1.75 String _connectHost;
301 Uint32 _connectPortNumber;
|
302 kumpf 1.55 SSLContext* _connectSSLContext;
|
303 kumpf 1.54 };
304
|
305 kumpf 1.69 static Boolean verifyServerCertificate(SSLCertificateInfo &certInfo)
|
306 kumpf 1.57 {
307 //ATTN-NB-03-05132002: Add code to handle server certificate verification.
308 return true;
309 }
|
310 kumpf 1.54
|
311 kumpf 1.68 CIMClientRep::CIMClientRep(Uint32 timeoutMilliseconds)
|
312 mike 1.31 :
|
313 kumpf 1.47 MessageQueue(PEGASUS_QUEUENAME_CLIENT),
|
314 kumpf 1.43 _httpConnection(0),
|
315 kumpf 1.68 _timeoutMilliseconds(timeoutMilliseconds),
|
316 mike 1.31 _connected(false),
317 _responseDecoder(0),
|
318 kumpf 1.70 _requestEncoder(0),
319 _connectSSLContext(0)
|
320 mike 1.29 {
|
321 mike 1.31 //
|
322 kumpf 1.39 // Create Monitor and HTTPConnector
323 //
324 _monitor = new Monitor();
325 _httpConnector = new HTTPConnector(_monitor);
|
326 mike 1.29 }
327
|
328 kumpf 1.54 CIMClientRep::~CIMClientRep()
|
329 mike 1.27 {
|
330 kumpf 1.40 disconnect();
|
331 kumpf 1.39 delete _httpConnector;
|
332 kumpf 1.80 delete _monitor;
|
333 mike 1.27 }
334
|
335 kumpf 1.54 void CIMClientRep::handleEnqueue()
|
336 mike 1.27 {
337
338 }
339
|
340 kumpf 1.70 void CIMClientRep::_connect()
|
341 mike 1.27 {
|
342 kumpf 1.40 //
|
343 mike 1.31 // Create response decoder:
|
344 kumpf 1.40 //
|
345 mike 1.31 _responseDecoder = new CIMOperationResponseDecoder(
|
346 kumpf 1.40 this, _requestEncoder, &_authenticator);
|
347 mike 1.31
|
348 kumpf 1.40 //
|
349 mike 1.31 // Attempt to establish a connection:
|
350 kumpf 1.40 //
|
351 mike 1.31 try
352 {
|
353 kumpf 1.75 _httpConnection = _httpConnector->connect(_connectHost,
354 _connectPortNumber,
|
355 kumpf 1.70 _connectSSLContext,
|
356 kumpf 1.39 _responseDecoder);
|
357 mike 1.31 }
|
358 kumpf 1.65 catch (CannotCreateSocketException& e)
|
359 mike 1.31 {
|
360 kumpf 1.49 delete _responseDecoder;
|
361 kumpf 1.65 throw e;
|
362 kumpf 1.49 }
|
363 kumpf 1.65 catch (CannotConnectException& e)
|
364 kumpf 1.49 {
365 delete _responseDecoder;
|
366 kumpf 1.65 throw e;
|
367 kumpf 1.49 }
|
368 kumpf 1.65 catch (InvalidLocatorException& e)
|
369 kumpf 1.49 {
370 delete _responseDecoder;
|
371 kumpf 1.65 throw e;
|
372 kumpf 1.49 }
|
373 mike 1.31
|
374 kumpf 1.40 //
|
375 mike 1.31 // Create request encoder:
|
376 kumpf 1.40 //
|
377 mike 1.31 _requestEncoder = new CIMOperationRequestEncoder(
|
378 kumpf 1.40 _httpConnection, &_authenticator);
|
379 mike 1.27
|
380 mike 1.31 _responseDecoder->setEncoderQueue(_requestEncoder);
|
381 kumpf 1.40
382 _connected = true;
|
383 kumpf 1.55 }
384
|
385 kumpf 1.65 void CIMClientRep::_reconnect()
|
386 kumpf 1.55 {
387 disconnect();
|
388 kumpf 1.70 _connect();
389 }
390
391 void CIMClientRep::connect(
|
392 kumpf 1.75 const String& host,
393 const Uint32 portNumber,
|
394 kumpf 1.70 const String& userName,
395 const String& password
396 )
397 {
398 //
399 // If already connected, bail out!
400 //
401 if (_connected)
402 throw AlreadyConnectedException();
403
404 //
|
405 kumpf 1.75 // If the host is empty, set hostName to "localhost"
|
406 kumpf 1.70 //
|
407 kumpf 1.75 String hostName = host;
408 if (host == String::EMPTY)
409 {
410 hostName = "localhost";
411 }
|
412 kumpf 1.70
413 //
414 // Set authentication information
415 //
416 _authenticator.clearRequest(true);
417 _authenticator.setAuthType(ClientAuthenticator::NONE);
418
419 if (userName.size())
420 {
421 _authenticator.setUserName(userName);
422 }
423
424 if (password.size())
425 {
426 _authenticator.setPassword(password);
427 }
428
429 _connectSSLContext = 0;
|
430 kumpf 1.75 _connectHost = hostName;
431 _connectPortNumber = portNumber;
|
432 kumpf 1.70
433 _connect();
|
434 kumpf 1.40 }
435
|
436 kumpf 1.70
|
437 kumpf 1.54 void CIMClientRep::connect(
|
438 kumpf 1.75 const String& host,
439 const Uint32 portNumber,
|
440 kumpf 1.70 const SSLContext& sslContext,
|
441 kumpf 1.40 const String& userName,
|
442 kumpf 1.49 const String& password
|
443 kumpf 1.65 )
|
444 kumpf 1.40 {
445 //
446 // If already connected, bail out!
447 //
448 if (_connected)
|
449 kumpf 1.65 throw AlreadyConnectedException();
|
450 kumpf 1.40
451 //
|
452 kumpf 1.75 // If the host is empty, set hostName to "localhost"
|
453 kumpf 1.40 //
|
454 kumpf 1.75 String hostName = host;
455 if (host == String::EMPTY)
456 {
457 hostName = "localhost";
458 }
|
459 kumpf 1.40
|
460 kumpf 1.35 //
461 // Set authentication information
462 //
|
463 kumpf 1.40 _authenticator.clearRequest(true);
|
464 kumpf 1.53 _authenticator.setAuthType(ClientAuthenticator::NONE);
|
465 kumpf 1.40
|
466 kumpf 1.35 if (userName.size())
467 {
|
468 kumpf 1.40 _authenticator.setUserName(userName);
|
469 kumpf 1.35 }
470
471 if (password.size())
472 {
|
473 kumpf 1.40 _authenticator.setPassword(password);
|
474 kumpf 1.35 }
|
475 kumpf 1.40
|
476 kumpf 1.70 _connectSSLContext = new SSLContext(sslContext);
|
477 kumpf 1.75 _connectHost = hostName;
478 _connectPortNumber = portNumber;
479
|
480 kumpf 1.70
481 try
482 {
483 _connect();
484 }
485 catch (Exception&)
486 {
487 delete _connectSSLContext;
488 _connectSSLContext = 0;
489 throw;
490 }
|
491 mike 1.27 }
492
|
493 kumpf 1.46
|
494 kumpf 1.65 void CIMClientRep::connectLocal()
|
495 mike 1.27 {
|
496 kumpf 1.40 //
497 // If already connected, bail out!
498 //
499 if (_connected)
|
500 kumpf 1.65 throw AlreadyConnectedException();
|
501 kumpf 1.40
502 //
|
503 kumpf 1.57 // Set authentication type
|
504 kumpf 1.40 //
|
505 kumpf 1.57 _authenticator.clearRequest(true);
506 _authenticator.setAuthType(ClientAuthenticator::LOCAL);
507
508 #ifdef PEGASUS_LOCAL_DOMAIN_SOCKET
|
509 kumpf 1.70 _connect();
|
510 kumpf 1.57 #else
511
512 try
513 {
514 //
515 // Look up the WBEM HTTP port number for the local system
516 //
|
517 kumpf 1.75 _connectPortNumber = System::lookupPort (WBEM_HTTP_SERVICE_NAME,
518 WBEM_DEFAULT_HTTP_PORT);
|
519 kumpf 1.57
520 //
|
521 kumpf 1.75 // Assign host
|
522 kumpf 1.57 //
|
523 kumpf 1.75 _connectHost.assign(_getLocalHostName());
|
524 kumpf 1.57
|
525 kumpf 1.70 _connectSSLContext = 0;
|
526 kumpf 1.57
|
527 kumpf 1.70 _connect();
|
528 kumpf 1.57 }
|
529 kumpf 1.65 catch(CannotConnectException &e)
|
530 kumpf 1.57 {
531 //
532 // Look up the WBEM HTTPS port number for the local system
533 //
|
534 kumpf 1.75 _connectPortNumber = System::lookupPort (WBEM_HTTPS_SERVICE_NAME,
535 WBEM_DEFAULT_HTTPS_PORT);
|
536 kumpf 1.57
537 //
|
538 kumpf 1.75 // Assign host
|
539 kumpf 1.57 //
|
540 kumpf 1.75 _connectHost.assign(_getLocalHostName());
|
541 kumpf 1.57
542 //
543 // Create SSLContext
544 //
545
546 const char* pegasusHome = getenv("PEGASUS_HOME");
547
|
548 kumpf 1.63 String certpath = FileSystem::getAbsolutePath(
549 pegasusHome, PEGASUS_SSLCLIENT_CERTIFICATEFILE);
|
550 kumpf 1.57
551 String randFile = String::EMPTY;
|
552 kumpf 1.33
|
553 kumpf 1.57 #ifdef PEGASUS_SSL_RANDOMFILE
|
554 kumpf 1.63 randFile = FileSystem::getAbsolutePath(
555 pegasusHome, PEGASUS_SSLCLIENT_RANDOMFILE);
|
556 kumpf 1.38 #endif
|
557 kumpf 1.33
|
558 kumpf 1.59 try
559 {
|
560 kumpf 1.70 _connectSSLContext =
|
561 kumpf 1.77 new SSLContext(certpath, verifyServerCertificate, randFile);
|
562 kumpf 1.59 }
|
563 kumpf 1.65 catch (SSLException &se)
|
564 kumpf 1.59 {
|
565 kumpf 1.65 throw se;
|
566 kumpf 1.59 }
|
567 kumpf 1.35
|
568 kumpf 1.70 try
569 {
570 _connect();
571 }
572 catch (Exception&)
573 {
574 delete _connectSSLContext;
575 _connectSSLContext = 0;
576 throw;
577 }
|
578 kumpf 1.57 }
579 #endif
|
580 kumpf 1.35 }
581
|
582 kumpf 1.54 void CIMClientRep::disconnect()
|
583 kumpf 1.35 {
584 if (_connected)
|
585 mike 1.31 {
|
586 kumpf 1.35 //
587 // destroy response decoder
588 //
589 if (_responseDecoder)
590 {
591 delete _responseDecoder;
|
592 kumpf 1.40 _responseDecoder = 0;
|
593 kumpf 1.35 }
594
595 //
|
596 kumpf 1.49 // Close the connection
|
597 kumpf 1.35 //
|
598 kumpf 1.71 if (_httpConnector)
599 {
600 _httpConnector->disconnect(_httpConnection);
601 }
|
602 kumpf 1.35
603 //
604 // destroy request encoder
605 //
606 if (_requestEncoder)
607 {
608 delete _requestEncoder;
|
609 kumpf 1.40 _requestEncoder = 0;
|
610 kumpf 1.35 }
611
|
612 kumpf 1.40 _authenticator.clearRequest(true);
|
613 kumpf 1.35
|
614 kumpf 1.70 if (_connectSSLContext)
615 {
616 delete _connectSSLContext;
617 _connectSSLContext = 0;
618 }
619
|
620 kumpf 1.35 _connected = false;
|
621 mike 1.31 }
|
622 kumpf 1.35 }
|
623 mike 1.27
624
|
625 kumpf 1.54 CIMClass CIMClientRep::getClass(
|
626 kumpf 1.64 const CIMNamespaceName& nameSpace,
627 const CIMName& className,
|
628 mike 1.27 Boolean localOnly,
629 Boolean includeQualifiers,
630 Boolean includeClassOrigin,
|
631 kumpf 1.49 const CIMPropertyList& propertyList
|
632 kumpf 1.65 )
|
633 mike 1.27 {
|
634 kumpf 1.48 CIMRequestMessage* request = new CIMGetClassRequestMessage(
635 String::EMPTY,
|
636 mike 1.31 nameSpace,
637 className,
638 localOnly,
639 includeQualifiers,
640 includeClassOrigin,
641 propertyList,
642 QueueIdStack());
643
|
644 kumpf 1.48 Message* message = _doRequest(request, CIM_GET_CLASS_RESPONSE_MESSAGE);
|
645 mike 1.31
646 CIMGetClassResponseMessage* response =
647 (CIMGetClassResponseMessage*)message;
648
649 Destroyer<CIMGetClassResponseMessage> destroyer(response);
650
651 return(response->cimClass);
|
652 mike 1.27 }
653
|
654 kumpf 1.54 CIMInstance CIMClientRep::getInstance(
|
655 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
656 kumpf 1.56 const CIMObjectPath& instanceName,
|
657 mike 1.27 Boolean localOnly,
658 Boolean includeQualifiers,
659 Boolean includeClassOrigin,
|
660 kumpf 1.49 const CIMPropertyList& propertyList
|
661 kumpf 1.65 )
|
662 mike 1.27 {
|
663 kumpf 1.48 CIMRequestMessage* request = new CIMGetInstanceRequestMessage(
664 String::EMPTY,
|
665 mike 1.31 nameSpace,
666 instanceName,
667 localOnly,
668 includeQualifiers,
669 includeClassOrigin,
670 propertyList,
671 QueueIdStack());
672
|
673 kumpf 1.48 Message* message = _doRequest(request, CIM_GET_INSTANCE_RESPONSE_MESSAGE);
|
674 mike 1.31
675 CIMGetInstanceResponseMessage* response =
676 (CIMGetInstanceResponseMessage*)message;
677
678 Destroyer<CIMGetInstanceResponseMessage> destroyer(response);
679
680 return(response->cimInstance);
|
681 mike 1.27 }
682
|
683 kumpf 1.54 void CIMClientRep::deleteClass(
|
684 kumpf 1.64 const CIMNamespaceName& nameSpace,
685 const CIMName& className
|
686 kumpf 1.65 )
|
687 mike 1.27 {
|
688 kumpf 1.48 CIMRequestMessage* request = new CIMDeleteClassRequestMessage(
689 String::EMPTY,
|
690 mike 1.31 nameSpace,
691 className,
692 QueueIdStack());
693
|
694 kumpf 1.48 Message* message = _doRequest(request, CIM_DELETE_CLASS_RESPONSE_MESSAGE);
|
695 mike 1.31
696 CIMDeleteClassResponseMessage* response =
697 (CIMDeleteClassResponseMessage*)message;
698
699 Destroyer<CIMDeleteClassResponseMessage> destroyer(response);
|
700 mike 1.27 }
701
|
702 kumpf 1.54 void CIMClientRep::deleteInstance(
|
703 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
704 kumpf 1.56 const CIMObjectPath& instanceName
|
705 kumpf 1.65 )
|
706 mike 1.27 {
|
707 kumpf 1.48 CIMRequestMessage* request = new CIMDeleteInstanceRequestMessage(
708 String::EMPTY,
|
709 mike 1.31 nameSpace,
710 instanceName,
711 QueueIdStack());
712
|
713 kumpf 1.48 Message* message = _doRequest(request, CIM_DELETE_INSTANCE_RESPONSE_MESSAGE);
|
714 mike 1.31
715 CIMDeleteInstanceResponseMessage* response =
716 (CIMDeleteInstanceResponseMessage*)message;
717
718 Destroyer<CIMDeleteInstanceResponseMessage> destroyer(response);
|
719 mike 1.27 }
720
|
721 kumpf 1.54 void CIMClientRep::createClass(
|
722 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
723 kumpf 1.49 const CIMClass& newClass
|
724 kumpf 1.65 )
|
725 mike 1.27 {
|
726 kumpf 1.48 CIMRequestMessage* request = new CIMCreateClassRequestMessage(
727 String::EMPTY,
|
728 mike 1.31 nameSpace,
729 newClass,
730 QueueIdStack());
731
|
732 kumpf 1.48 Message* message = _doRequest(request, CIM_CREATE_CLASS_RESPONSE_MESSAGE);
|
733 mike 1.31
734 CIMCreateClassResponseMessage* response =
735 (CIMCreateClassResponseMessage*)message;
736
737 Destroyer<CIMCreateClassResponseMessage> destroyer(response);
|
738 mike 1.27 }
739
|
740 kumpf 1.56 CIMObjectPath CIMClientRep::createInstance(
|
741 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
742 kumpf 1.49 const CIMInstance& newInstance
|
743 kumpf 1.65 )
|
744 mike 1.27 {
|
745 kumpf 1.48 CIMRequestMessage* request = new CIMCreateInstanceRequestMessage(
746 String::EMPTY,
|
747 mike 1.31 nameSpace,
748 newInstance,
749 QueueIdStack());
750
|
751 kumpf 1.48 Message* message = _doRequest(request, CIM_CREATE_INSTANCE_RESPONSE_MESSAGE);
|
752 mike 1.31
753 CIMCreateInstanceResponseMessage* response =
754 (CIMCreateInstanceResponseMessage*)message;
755
756 Destroyer<CIMCreateInstanceResponseMessage> destroyer(response);
757
758 return(response->instanceName);
|
759 mike 1.27 }
760
|
761 kumpf 1.54 void CIMClientRep::modifyClass(
|
762 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
763 kumpf 1.49 const CIMClass& modifiedClass
|
764 kumpf 1.65 )
|
765 mike 1.27 {
|
766 kumpf 1.48 CIMRequestMessage* request = new CIMModifyClassRequestMessage(
767 String::EMPTY,
|
768 mike 1.31 nameSpace,
769 modifiedClass,
770 QueueIdStack());
771
|
772 kumpf 1.48 Message* message = _doRequest(request, CIM_MODIFY_CLASS_RESPONSE_MESSAGE);
|
773 mike 1.31
774 CIMModifyClassResponseMessage* response =
775 (CIMModifyClassResponseMessage*)message;
776
777 Destroyer<CIMModifyClassResponseMessage> destroyer(response);
|
778 mike 1.27 }
779
|
780 kumpf 1.54 void CIMClientRep::modifyInstance(
|
781 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
782 kumpf 1.60 const CIMInstance& modifiedInstance,
|
783 mike 1.31 Boolean includeQualifiers,
|
784 kumpf 1.49 const CIMPropertyList& propertyList
|
785 kumpf 1.65 )
|
786 mike 1.27 {
|
787 kumpf 1.48 CIMRequestMessage* request = new CIMModifyInstanceRequestMessage(
788 String::EMPTY,
|
789 mike 1.31 nameSpace,
790 modifiedInstance,
791 includeQualifiers,
792 propertyList,
793 QueueIdStack());
794
|
795 kumpf 1.48 Message* message = _doRequest(request, CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE);
|
796 mike 1.31
797 CIMModifyInstanceResponseMessage* response =
798 (CIMModifyInstanceResponseMessage*)message;
799
800 Destroyer<CIMModifyInstanceResponseMessage> destroyer(response);
|
801 mike 1.27 }
802
|
803 kumpf 1.54 Array<CIMClass> CIMClientRep::enumerateClasses(
|
804 kumpf 1.64 const CIMNamespaceName& nameSpace,
805 const CIMName& className,
|
806 mike 1.27 Boolean deepInheritance,
807 Boolean localOnly,
|
808 mike 1.31 Boolean includeQualifiers,
|
809 kumpf 1.49 Boolean includeClassOrigin
|
810 kumpf 1.65 )
|
811 mike 1.27 {
|
812 kumpf 1.48 CIMRequestMessage* request = new CIMEnumerateClassesRequestMessage(
813 String::EMPTY,
|
814 mike 1.31 nameSpace,
815 className,
816 deepInheritance,
817 localOnly,
818 includeQualifiers,
819 includeClassOrigin,
820 QueueIdStack());
821
|
822 kumpf 1.48 Message* message = _doRequest(request, CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE);
|
823 mike 1.31
824 CIMEnumerateClassesResponseMessage* response =
825 (CIMEnumerateClassesResponseMessage*)message;
826
827 Destroyer<CIMEnumerateClassesResponseMessage> destroyer(response);
828
829 return(response->cimClasses);
|
830 mike 1.27 }
831
|
832 kumpf 1.64 Array<CIMName> CIMClientRep::enumerateClassNames(
833 const CIMNamespaceName& nameSpace,
834 const CIMName& className,
|
835 kumpf 1.49 Boolean deepInheritance
|
836 kumpf 1.65 )
|
837 mike 1.27 {
|
838 kumpf 1.48 CIMRequestMessage* request = new CIMEnumerateClassNamesRequestMessage(
839 String::EMPTY,
|
840 mike 1.31 nameSpace,
841 className,
842 deepInheritance,
843 QueueIdStack());
844
|
845 kumpf 1.48 Message* message = _doRequest(request, CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE);
|
846 mike 1.31
847 CIMEnumerateClassNamesResponseMessage* response =
848 (CIMEnumerateClassNamesResponseMessage*)message;
849
850 Destroyer<CIMEnumerateClassNamesResponseMessage> destroyer(response);
851
|
852 kumpf 1.64 // Temporary code until internal structures use CIMName instead of String
853 Array<CIMName> classNameArray;
854 classNameArray.reserveCapacity(response->classNames.size());
855 for (Uint32 i=0; i<response->classNames.size(); i++)
856 {
857 classNameArray.append(response->classNames[i]);
858 }
859 return(classNameArray);
|
860 mike 1.27 }
861
|
862 kumpf 1.60 Array<CIMInstance> CIMClientRep::enumerateInstances(
|
863 kumpf 1.64 const CIMNamespaceName& nameSpace,
864 const CIMName& className,
|
865 mike 1.27 Boolean deepInheritance,
866 Boolean localOnly,
867 Boolean includeQualifiers,
868 Boolean includeClassOrigin,
|
869 kumpf 1.49 const CIMPropertyList& propertyList
|
870 kumpf 1.65 )
|
871 mike 1.27 {
|
872 kumpf 1.48 CIMRequestMessage* request = new CIMEnumerateInstancesRequestMessage(
873 String::EMPTY,
|
874 mike 1.31 nameSpace,
875 className,
876 deepInheritance,
877 localOnly,
878 includeQualifiers,
879 includeClassOrigin,
880 propertyList,
881 QueueIdStack());
882
|
883 kumpf 1.48 Message* message = _doRequest(request, CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE);
|
884 mike 1.31
885 CIMEnumerateInstancesResponseMessage* response =
886 (CIMEnumerateInstancesResponseMessage*)message;
887
888 Destroyer<CIMEnumerateInstancesResponseMessage> destroyer(response);
889
890 return(response->cimNamedInstances);
|
891 mike 1.27 }
892
|
893 kumpf 1.56 Array<CIMObjectPath> CIMClientRep::enumerateInstanceNames(
|
894 kumpf 1.64 const CIMNamespaceName& nameSpace,
895 const CIMName& className
|
896 kumpf 1.65 )
|
897 mike 1.27 {
|
898 kumpf 1.48 CIMRequestMessage* request = new CIMEnumerateInstanceNamesRequestMessage(
899 String::EMPTY,
|
900 mike 1.31 nameSpace,
901 className,
902 QueueIdStack());
903
|
904 kumpf 1.48 Message* message = _doRequest(request, CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE);
|
905 mike 1.31
906 CIMEnumerateInstanceNamesResponseMessage* response =
907 (CIMEnumerateInstanceNamesResponseMessage*)message;
908
909 Destroyer<CIMEnumerateInstanceNamesResponseMessage> destroyer(response);
910
911 return(response->instanceNames);
|
912 mike 1.27 }
913
|
914 kumpf 1.61 Array<CIMObject> CIMClientRep::execQuery(
|
915 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
916 mike 1.27 const String& queryLanguage,
|
917 kumpf 1.49 const String& query
|
918 kumpf 1.65 )
|
919 mike 1.27 {
|
920 kumpf 1.48 CIMRequestMessage* request = new CIMExecQueryRequestMessage(
921 String::EMPTY,
|
922 kumpf 1.41 nameSpace,
|
923 mike 1.31 queryLanguage,
924 query,
925 QueueIdStack());
926
|
927 kumpf 1.48 Message* message = _doRequest(request, CIM_EXEC_QUERY_RESPONSE_MESSAGE);
|
928 mike 1.31
929 CIMExecQueryResponseMessage* response =
930 (CIMExecQueryResponseMessage*)message;
931
932 Destroyer<CIMExecQueryResponseMessage> destroyer(response);
933
|
934 kumpf 1.42 return(response->cimObjects);
|
935 mike 1.27 }
936
|
937 kumpf 1.61 Array<CIMObject> CIMClientRep::associators(
|
938 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
939 kumpf 1.56 const CIMObjectPath& objectName,
|
940 kumpf 1.64 const CIMName& assocClass,
941 const CIMName& resultClass,
|
942 mike 1.27 const String& role,
943 const String& resultRole,
944 Boolean includeQualifiers,
945 Boolean includeClassOrigin,
|
946 kumpf 1.49 const CIMPropertyList& propertyList
|
947 kumpf 1.65 )
|
948 mike 1.27 {
|
949 kumpf 1.48 CIMRequestMessage* request = new CIMAssociatorsRequestMessage(
950 String::EMPTY,
|
951 mike 1.31 nameSpace,
952 objectName,
953 assocClass,
954 resultClass,
955 role,
956 resultRole,
957 includeQualifiers,
958 includeClassOrigin,
959 propertyList,
960 QueueIdStack());
961
|
962 kumpf 1.48 Message* message = _doRequest(request, CIM_ASSOCIATORS_RESPONSE_MESSAGE);
|
963 mike 1.31
964 CIMAssociatorsResponseMessage* response =
965 (CIMAssociatorsResponseMessage*)message;
966
967 Destroyer<CIMAssociatorsResponseMessage> destroyer(response);
968
969 return(response->cimObjects);
|
970 mike 1.27 }
971
|
972 kumpf 1.56 Array<CIMObjectPath> CIMClientRep::associatorNames(
|
973 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
974 kumpf 1.56 const CIMObjectPath& objectName,
|
975 kumpf 1.64 const CIMName& assocClass,
976 const CIMName& resultClass,
|
977 mike 1.27 const String& role,
|
978 kumpf 1.49 const String& resultRole
|
979 kumpf 1.65 )
|
980 mike 1.27 {
|
981 kumpf 1.48 CIMRequestMessage* request = new CIMAssociatorNamesRequestMessage(
982 String::EMPTY,
|
983 mike 1.31 nameSpace,
984 objectName,
985 assocClass,
986 resultClass,
987 role,
988 resultRole,
989 QueueIdStack());
990
|
991 kumpf 1.48 Message* message = _doRequest(request, CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE);
|
992 mike 1.31
993 CIMAssociatorNamesResponseMessage* response =
994 (CIMAssociatorNamesResponseMessage*)message;
995
996 Destroyer<CIMAssociatorNamesResponseMessage> destroyer(response);
997
998 return(response->objectNames);
|
999 mike 1.27 }
1000
|
1001 kumpf 1.61 Array<CIMObject> CIMClientRep::references(
|
1002 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1003 kumpf 1.56 const CIMObjectPath& objectName,
|
1004 kumpf 1.64 const CIMName& resultClass,
|
1005 mike 1.27 const String& role,
1006 Boolean includeQualifiers,
1007 Boolean includeClassOrigin,
|
1008 kumpf 1.49 const CIMPropertyList& propertyList
|
1009 kumpf 1.65 )
|
1010 mike 1.27 {
|
1011 kumpf 1.48 CIMRequestMessage* request = new CIMReferencesRequestMessage(
1012 String::EMPTY,
|
1013 mike 1.31 nameSpace,
1014 objectName,
1015 resultClass,
1016 role,
1017 includeQualifiers,
1018 includeClassOrigin,
1019 propertyList,
1020 QueueIdStack());
1021
|
1022 kumpf 1.48 Message* message = _doRequest(request, CIM_REFERENCES_RESPONSE_MESSAGE);
|
1023 mike 1.31
1024 CIMReferencesResponseMessage* response =
1025 (CIMReferencesResponseMessage*)message;
1026
1027 Destroyer<CIMReferencesResponseMessage> destroyer(response);
1028
1029 return(response->cimObjects);
|
1030 mike 1.27 }
1031
|
1032 kumpf 1.56 Array<CIMObjectPath> CIMClientRep::referenceNames(
|
1033 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1034 kumpf 1.56 const CIMObjectPath& objectName,
|
1035 kumpf 1.64 const CIMName& resultClass,
|
1036 kumpf 1.49 const String& role
|
1037 kumpf 1.65 )
|
1038 mike 1.27 {
|
1039 kumpf 1.48 CIMRequestMessage* request = new CIMReferenceNamesRequestMessage(
1040 String::EMPTY,
|
1041 mike 1.31 nameSpace,
1042 objectName,
1043 resultClass,
1044 role,
1045 QueueIdStack());
1046
|
1047 kumpf 1.48 Message* message = _doRequest(request, CIM_REFERENCE_NAMES_RESPONSE_MESSAGE);
|
1048 mike 1.31
1049 CIMReferenceNamesResponseMessage* response =
1050 (CIMReferenceNamesResponseMessage*)message;
1051
1052 Destroyer<CIMReferenceNamesResponseMessage> destroyer(response);
1053
1054 return(response->objectNames);
|
1055 mike 1.27 }
1056
|
1057 kumpf 1.54 CIMValue CIMClientRep::getProperty(
|
1058 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1059 kumpf 1.56 const CIMObjectPath& instanceName,
|
1060 kumpf 1.64 const CIMName& propertyName
|
1061 kumpf 1.65 )
|
1062 mike 1.27 {
|
1063 kumpf 1.48 CIMRequestMessage* request = new CIMGetPropertyRequestMessage(
1064 String::EMPTY,
|
1065 mike 1.31 nameSpace,
1066 instanceName,
1067 propertyName,
1068 QueueIdStack());
1069
|
1070 kumpf 1.48 Message* message = _doRequest(request, CIM_GET_PROPERTY_RESPONSE_MESSAGE);
|
1071 mike 1.31
1072 CIMGetPropertyResponseMessage* response =
1073 (CIMGetPropertyResponseMessage*)message;
1074
1075 Destroyer<CIMGetPropertyResponseMessage> destroyer(response);
1076
1077 return(response->value);
|
1078 mike 1.27 }
1079
|
1080 kumpf 1.54 void CIMClientRep::setProperty(
|
1081 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1082 kumpf 1.56 const CIMObjectPath& instanceName,
|
1083 kumpf 1.64 const CIMName& propertyName,
|
1084 kumpf 1.49 const CIMValue& newValue
|
1085 kumpf 1.65 )
|
1086 mike 1.27 {
|
1087 kumpf 1.48 CIMRequestMessage* request = new CIMSetPropertyRequestMessage(
1088 String::EMPTY,
|
1089 mike 1.31 nameSpace,
1090 instanceName,
1091 propertyName,
1092 newValue,
1093 QueueIdStack());
1094
|
1095 kumpf 1.48 Message* message = _doRequest(request, CIM_SET_PROPERTY_RESPONSE_MESSAGE);
|
1096 mike 1.31
1097 CIMSetPropertyResponseMessage* response =
1098 (CIMSetPropertyResponseMessage*)message;
1099
1100 Destroyer<CIMSetPropertyResponseMessage> destroyer(response);
|
1101 mike 1.27 }
1102
|
1103 kumpf 1.54 CIMQualifierDecl CIMClientRep::getQualifier(
|
1104 kumpf 1.64 const CIMNamespaceName& nameSpace,
1105 const CIMName& qualifierName
|
1106 kumpf 1.65 )
|
1107 mike 1.27 {
|
1108 kumpf 1.48 CIMRequestMessage* request = new CIMGetQualifierRequestMessage(
1109 String::EMPTY,
|
1110 mike 1.31 nameSpace,
1111 qualifierName,
1112 QueueIdStack());
1113
|
1114 kumpf 1.48 Message* message = _doRequest(request, CIM_GET_QUALIFIER_RESPONSE_MESSAGE);
|
1115 mike 1.31
1116 CIMGetQualifierResponseMessage* response =
1117 (CIMGetQualifierResponseMessage*)message;
1118
1119 Destroyer<CIMGetQualifierResponseMessage> destroyer(response);
1120
1121 return(response->cimQualifierDecl);
|
1122 mike 1.27 }
1123
|
1124 kumpf 1.54 void CIMClientRep::setQualifier(
|
1125 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1126 kumpf 1.49 const CIMQualifierDecl& qualifierDeclaration
|
1127 kumpf 1.65 )
|
1128 mike 1.27 {
|
1129 kumpf 1.48 CIMRequestMessage* request = new CIMSetQualifierRequestMessage(
1130 String::EMPTY,
|
1131 mike 1.31 nameSpace,
1132 qualifierDeclaration,
1133 QueueIdStack());
1134
|
1135 kumpf 1.48 Message* message = _doRequest(request, CIM_SET_QUALIFIER_RESPONSE_MESSAGE);
|
1136 mike 1.31
1137 CIMSetQualifierResponseMessage* response =
1138 (CIMSetQualifierResponseMessage*)message;
1139
1140 Destroyer<CIMSetQualifierResponseMessage> destroyer(response);
|
1141 mike 1.27 }
1142
|
1143 kumpf 1.54 void CIMClientRep::deleteQualifier(
|
1144 kumpf 1.64 const CIMNamespaceName& nameSpace,
1145 const CIMName& qualifierName
|
1146 kumpf 1.65 )
|
1147 mike 1.27 {
|
1148 kumpf 1.48 CIMRequestMessage* request = new CIMDeleteQualifierRequestMessage(
1149 String::EMPTY,
|
1150 mike 1.31 nameSpace,
1151 qualifierName,
1152 QueueIdStack());
1153
|
1154 kumpf 1.48 Message* message = _doRequest(request, CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE);
|
1155 mike 1.31
1156 CIMDeleteQualifierResponseMessage* response =
1157 (CIMDeleteQualifierResponseMessage*)message;
1158
1159 Destroyer<CIMDeleteQualifierResponseMessage> destroyer(response);
|
1160 mike 1.27 }
1161
|
1162 kumpf 1.54 Array<CIMQualifierDecl> CIMClientRep::enumerateQualifiers(
|
1163 kumpf 1.64 const CIMNamespaceName& nameSpace
|
1164 kumpf 1.65 )
|
1165 mike 1.27 {
|
1166 kumpf 1.48 CIMRequestMessage* request = new CIMEnumerateQualifiersRequestMessage(
1167 String::EMPTY,
|
1168 mike 1.31 nameSpace,
1169 QueueIdStack());
1170
|
1171 kumpf 1.48 Message* message = _doRequest(request, CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE);
|
1172 mike 1.31
1173 CIMEnumerateQualifiersResponseMessage* response =
1174 (CIMEnumerateQualifiersResponseMessage*)message;
1175
1176 Destroyer<CIMEnumerateQualifiersResponseMessage> destroyer(response);
1177
1178 return(response->qualifierDeclarations);
1179 }
1180
|
1181 kumpf 1.54 CIMValue CIMClientRep::invokeMethod(
|
1182 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1183 kumpf 1.56 const CIMObjectPath& instanceName,
|
1184 kumpf 1.64 const CIMName& methodName,
|
1185 mike 1.31 const Array<CIMParamValue>& inParameters,
|
1186 kumpf 1.49 Array<CIMParamValue>& outParameters
|
1187 kumpf 1.65 )
|
1188 mike 1.31 {
|
1189 kumpf 1.34 // ATTN-RK-P2-20020301: Does it make sense to have a nameSpace parameter
1190 // when the namespace should already be included in the instanceName?
1191 // ATTN-RK-P3-20020301: Do we need to make sure the caller didn't specify
1192 // a host name in the instanceName?
1193
|
1194 kumpf 1.48 CIMRequestMessage* request = new CIMInvokeMethodRequestMessage(
1195 String::EMPTY,
|
1196 mike 1.31 nameSpace,
1197 instanceName,
1198 methodName,
1199 inParameters,
1200 QueueIdStack());
1201
|
1202 kumpf 1.48 Message* message = _doRequest(request, CIM_INVOKE_METHOD_RESPONSE_MESSAGE);
|
1203 mike 1.31
1204 CIMInvokeMethodResponseMessage* response =
1205 (CIMInvokeMethodResponseMessage*)message;
1206
1207 Destroyer<CIMInvokeMethodResponseMessage> destroyer(response);
1208
1209 outParameters = response->outParameters;
1210
1211 return(response->retValue);
1212 }
1213
|
1214 kumpf 1.54 Message* CIMClientRep::_doRequest(
|
1215 kumpf 1.48 CIMRequestMessage * request,
|
1216 kumpf 1.49 const Uint32 expectedResponseMessageType
|
1217 kumpf 1.65 )
|
1218 mike 1.31 {
1219 if (!_connected)
|
1220 kumpf 1.48 {
1221 delete request;
|
1222 kumpf 1.65 throw NotConnectedException();
|
1223 kumpf 1.48 }
|
1224 mike 1.31
|
1225 kumpf 1.48 String messageId = XmlWriter::getNextMessageId();
1226 const_cast<String &>(request->messageId) = messageId;
1227
1228 _authenticator.clearRequest();
1229
|
1230 kumpf 1.49 // ATTN-RK-P2-20020416: We should probably clear out the queue first.
|
1231 kumpf 1.48 PEGASUS_ASSERT(getCount() == 0); // Shouldn't be any messages in our queue
|
1232 mike 1.27
|
1233 kumpf 1.79 //
1234 // Set HTTP method in request to M-POST
1235 //
1236 request->setHttpMethod (HTTP_METHOD_M_POST);
1237
|
1238 kumpf 1.48 _requestEncoder->enqueue(request);
1239
|
1240 kumpf 1.51 Uint64 startMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
1241 Uint64 nowMilliseconds = startMilliseconds;
|
1242 kumpf 1.68 Uint64 stopMilliseconds = nowMilliseconds + _timeoutMilliseconds;
|
1243 kumpf 1.48
1244 while (nowMilliseconds < stopMilliseconds)
|
1245 mike 1.31 {
1246 //
1247 // Wait until the timeout expires or an event occurs:
1248 //
1249
|
1250 mday 1.58 _monitor->run(Uint32(stopMilliseconds - nowMilliseconds));
1251
|
1252 mike 1.31 //
|
1253 kumpf 1.48 // Check to see if incoming queue has a message
|
1254 mike 1.31 //
|
1255 mike 1.27
|
1256 kumpf 1.48 Message* response = dequeue();
|
1257 mike 1.31
|
1258 kumpf 1.48 if (response)
|
1259 mike 1.31 {
|
1260 kumpf 1.48 // Shouldn't be any more messages in our queue
1261 PEGASUS_ASSERT(getCount() == 0);
|
1262 kumpf 1.79
1263 //
1264 // ATTN-CAKG-20021001: If HTTP response is 501 Not Implemented
1265 // or 510 Not Extended, retry with POST method
1266 //
|
1267 mike 1.27
|
1268 kumpf 1.49 if (response->getType() == CLIENT_EXCEPTION_MESSAGE)
|
1269 kumpf 1.48 {
|
1270 kumpf 1.65 Exception* clientException =
|
1271 kumpf 1.52 ((ClientExceptionMessage*)response)->clientException;
|
1272 kumpf 1.48 delete response;
|
1273 kumpf 1.65 Destroyer<Exception> d(clientException);
|
1274 kumpf 1.52 throw *clientException;
|
1275 kumpf 1.48 }
1276 else if (response->getType() == expectedResponseMessageType)
1277 {
1278 CIMResponseMessage* cimResponse = (CIMResponseMessage*)response;
1279 if (cimResponse->messageId != messageId)
1280 {
|
1281 kumpf 1.49 CIMClientResponseException responseException(
1282 String("Mismatched response message ID: Got \"") +
1283 cimResponse->messageId + "\", expected \"" +
1284 messageId + "\".");
1285 delete response;
1286 throw responseException;
|
1287 kumpf 1.48 }
1288 if (cimResponse->cimException.getCode() != CIM_ERR_SUCCESS)
1289 {
|
1290 kumpf 1.66 CIMException cimException(
|
1291 kumpf 1.49 cimResponse->cimException.getCode(),
1292 cimResponse->cimException.getMessage());
|
1293 kumpf 1.48 delete response;
1294 throw cimException;
1295 }
1296 return response;
1297 }
1298 else
1299 {
|
1300 kumpf 1.49 CIMClientResponseException responseException(
1301 "Mismatched response message type.");
1302 delete response;
1303 throw responseException;
|
1304 kumpf 1.48 }
|
1305 mike 1.31 }
|
1306 mike 1.27
|
1307 kumpf 1.48 nowMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
|
1308 mday 1.58 pegasus_yield();
|
1309 mike 1.31 }
|
1310 mike 1.27
|
1311 mike 1.31 //
|
1312 kumpf 1.55 // Reconnect to reset the connection (disregard late response)
1313 //
1314 try
1315 {
1316 _reconnect();
1317 }
1318 catch (...)
1319 {
1320 }
1321
1322 //
|
1323 mike 1.31 // Throw timed out exception:
1324 //
|
1325 kumpf 1.65 throw ConnectionTimeoutException();
|
1326 kumpf 1.33 }
1327
|
1328 kumpf 1.54 String CIMClientRep::_getLocalHostName()
|
1329 kumpf 1.33 {
1330 static String hostname;
1331
1332 if (!hostname.size())
1333 {
1334 hostname.assign(System::getHostName());
1335 }
1336
1337 return hostname;
|
1338 kumpf 1.54 }
1339
1340
1341 ///////////////////////////////////////////////////////////////////////////////
1342 //
1343 // CIMClient
1344 //
1345 ///////////////////////////////////////////////////////////////////////////////
1346
|
1347 kumpf 1.68 CIMClient::CIMClient()
|
1348 kumpf 1.54 {
|
1349 kumpf 1.68 _rep = new CIMClientRep();
|
1350 kumpf 1.54 }
1351
1352 CIMClient::~CIMClient()
1353 {
1354 delete _rep;
1355 }
1356
|
1357 kumpf 1.68 Uint32 CIMClient::getTimeout() const
|
1358 kumpf 1.54 {
|
1359 kumpf 1.68 return _rep->getTimeout();
|
1360 kumpf 1.54 }
1361
|
1362 kumpf 1.68 void CIMClient::setTimeout(Uint32 timeoutMilliseconds)
|
1363 kumpf 1.54 {
|
1364 kumpf 1.68 _rep->setTimeout(timeoutMilliseconds);
|
1365 kumpf 1.54 }
1366
1367 void CIMClient::connect(
|
1368 kumpf 1.75 const String& host,
1369 const Uint32 portNumber,
|
1370 kumpf 1.54 const String& userName,
1371 const String& password
|
1372 kumpf 1.65 )
|
1373 kumpf 1.54 {
|
1374 kumpf 1.75 _rep->connect(host, portNumber, userName, password);
|
1375 kumpf 1.54 }
1376
1377 void CIMClient::connect(
|
1378 kumpf 1.75 const String& host,
1379 const Uint32 portNumber,
|
1380 kumpf 1.70 const SSLContext& sslContext,
|
1381 kumpf 1.54 const String& userName,
1382 const String& password
|
1383 kumpf 1.65 )
|
1384 kumpf 1.54 {
|
1385 kumpf 1.75 _rep->connect(host, portNumber, sslContext, userName, password);
|
1386 kumpf 1.54 }
1387
|
1388 kumpf 1.74 #ifndef PEGASUS_REMOVE_DEPRECATED
1389 void CIMClient::connect(
|
1390 kumpf 1.76 const String& address,
1391 const String& userName,
1392 const String& password
|
1393 kumpf 1.74 )
1394 {
|
1395 kumpf 1.75 Uint32 index = address.find (':');
1396 String host = address.subString (0, index);
1397 Uint32 portNumber = 0;
1398 if (index != PEG_NOT_FOUND)
1399 {
1400 String portStr = address.subString (index + 1, address.size ());
1401 sscanf (portStr.getCString (), "%u", &portNumber);
1402 }
1403 else
|
1404 karl 1.80.6.1 throw InvalidLocatorException ("Invalid address, no port separator" + address);
|
1405 kumpf 1.76 _rep->connect (host, portNumber, userName, password);
|
1406 kumpf 1.74 }
1407
1408 void CIMClient::connect(
1409 const String& address,
|
1410 kumpf 1.76 const SSLContext& sslContext,
1411 const String& userName,
1412 const String& password
|
1413 kumpf 1.74 )
1414 {
|
1415 kumpf 1.75 Uint32 index = address.find (':');
1416 String host = address.subString (0, index);
1417 Uint32 portNumber = 0;
1418 if (index != PEG_NOT_FOUND)
1419 {
1420 String portStr = address.subString (index + 1, address.size ());
1421 sscanf (portStr.getCString (), "%u", &portNumber);
1422 }
1423 else
1424 throw InvalidLocatorException (address);
|
1425 kumpf 1.76 _rep->connect (host, portNumber, sslContext, userName, password);
|
1426 kumpf 1.74 }
1427 #endif
1428
|
1429 kumpf 1.65 void CIMClient::connectLocal()
|
1430 kumpf 1.54 {
|
1431 kumpf 1.57 _rep->connectLocal();
|
1432 kumpf 1.54 }
1433
1434 void CIMClient::disconnect()
1435 {
1436 _rep->disconnect();
1437 }
1438
1439
1440 CIMClass CIMClient::getClass(
|
1441 kumpf 1.64 const CIMNamespaceName& nameSpace,
1442 const CIMName& className,
|
1443 kumpf 1.54 Boolean localOnly,
1444 Boolean includeQualifiers,
1445 Boolean includeClassOrigin,
1446 const CIMPropertyList& propertyList
|
1447 kumpf 1.65 )
|
1448 kumpf 1.54 {
1449 return _rep->getClass(
1450 nameSpace,
1451 className,
1452 localOnly,
1453 includeQualifiers,
1454 includeClassOrigin,
1455 propertyList);
1456 }
1457
1458 CIMInstance CIMClient::getInstance(
|
1459 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1460 kumpf 1.56 const CIMObjectPath& instanceName,
|
1461 kumpf 1.54 Boolean localOnly,
1462 Boolean includeQualifiers,
1463 Boolean includeClassOrigin,
1464 const CIMPropertyList& propertyList
|
1465 kumpf 1.65 )
|
1466 kumpf 1.54 {
1467 return _rep->getInstance(
1468 nameSpace,
1469 instanceName,
1470 localOnly,
1471 includeQualifiers,
1472 includeClassOrigin,
1473 propertyList);
1474 }
1475
1476 void CIMClient::deleteClass(
|
1477 kumpf 1.64 const CIMNamespaceName& nameSpace,
1478 const CIMName& className
|
1479 kumpf 1.65 )
|
1480 kumpf 1.54 {
1481 _rep->deleteClass(
1482 nameSpace,
1483 className);
1484 }
1485
1486 void CIMClient::deleteInstance(
|
1487 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1488 kumpf 1.56 const CIMObjectPath& instanceName
|
1489 kumpf 1.65 )
|
1490 kumpf 1.54 {
1491 _rep->deleteInstance(
1492 nameSpace,
1493 instanceName);
1494 }
1495
1496 void CIMClient::createClass(
|
1497 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1498 kumpf 1.54 const CIMClass& newClass
|
1499 kumpf 1.65 )
|
1500 kumpf 1.54 {
1501 _rep->createClass(
1502 nameSpace,
1503 newClass);
1504 }
1505
|
1506 kumpf 1.56 CIMObjectPath CIMClient::createInstance(
|
1507 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1508 kumpf 1.54 const CIMInstance& newInstance
|
1509 kumpf 1.65 )
|
1510 kumpf 1.54 {
1511 return _rep->createInstance(
1512 nameSpace,
1513 newInstance);
1514 }
1515
1516 void CIMClient::modifyClass(
|
1517 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1518 kumpf 1.54 const CIMClass& modifiedClass
|
1519 kumpf 1.65 )
|
1520 kumpf 1.54 {
1521 _rep->modifyClass(
1522 nameSpace,
1523 modifiedClass);
1524 }
1525
1526 void CIMClient::modifyInstance(
|
1527 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1528 kumpf 1.60 const CIMInstance& modifiedInstance,
|
1529 kumpf 1.54 Boolean includeQualifiers,
1530 const CIMPropertyList& propertyList
|
1531 kumpf 1.65 )
|
1532 kumpf 1.54 {
1533 _rep->modifyInstance(
1534 nameSpace,
1535 modifiedInstance,
1536 includeQualifiers,
1537 propertyList);
1538 }
1539
1540 Array<CIMClass> CIMClient::enumerateClasses(
|
1541 kumpf 1.64 const CIMNamespaceName& nameSpace,
1542 const CIMName& className,
|
1543 kumpf 1.54 Boolean deepInheritance,
1544 Boolean localOnly,
1545 Boolean includeQualifiers,
1546 Boolean includeClassOrigin
|
1547 kumpf 1.65 )
|
1548 kumpf 1.54 {
1549 return _rep->enumerateClasses(
1550 nameSpace,
1551 className,
1552 deepInheritance,
1553 localOnly,
1554 includeQualifiers,
1555 includeClassOrigin);
1556 }
1557
|
1558 kumpf 1.64 Array<CIMName> CIMClient::enumerateClassNames(
1559 const CIMNamespaceName& nameSpace,
1560 const CIMName& className,
|
1561 kumpf 1.54 Boolean deepInheritance
|
1562 kumpf 1.65 )
|
1563 kumpf 1.54 {
1564 return _rep->enumerateClassNames(
1565 nameSpace,
1566 className,
1567 deepInheritance);
1568 }
1569
|
1570 kumpf 1.60 Array<CIMInstance> CIMClient::enumerateInstances(
|
1571 kumpf 1.64 const CIMNamespaceName& nameSpace,
1572 const CIMName& className,
|
1573 kumpf 1.54 Boolean deepInheritance,
1574 Boolean localOnly,
1575 Boolean includeQualifiers,
1576 Boolean includeClassOrigin,
1577 const CIMPropertyList& propertyList
|
1578 kumpf 1.65 )
|
1579 kumpf 1.54 {
1580 return _rep->enumerateInstances(
1581 nameSpace,
1582 className,
1583 deepInheritance,
1584 localOnly,
1585 includeQualifiers,
1586 includeClassOrigin,
1587 propertyList);
1588 }
1589
|
1590 kumpf 1.56 Array<CIMObjectPath> CIMClient::enumerateInstanceNames(
|
1591 kumpf 1.64 const CIMNamespaceName& nameSpace,
1592 const CIMName& className
|
1593 kumpf 1.65 )
|
1594 kumpf 1.54 {
1595 return _rep->enumerateInstanceNames(
1596 nameSpace,
1597 className);
1598 }
1599
|
1600 kumpf 1.61 Array<CIMObject> CIMClient::execQuery(
|
1601 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1602 kumpf 1.54 const String& queryLanguage,
1603 const String& query
|
1604 kumpf 1.65 )
|
1605 kumpf 1.54 {
1606 return _rep->execQuery(
1607 nameSpace,
1608 queryLanguage,
1609 query);
1610 }
1611
|
1612 kumpf 1.61 Array<CIMObject> CIMClient::associators(
|
1613 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1614 kumpf 1.56 const CIMObjectPath& objectName,
|
1615 kumpf 1.64 const CIMName& assocClass,
1616 const CIMName& resultClass,
|
1617 kumpf 1.54 const String& role,
1618 const String& resultRole,
1619 Boolean includeQualifiers,
1620 Boolean includeClassOrigin,
1621 const CIMPropertyList& propertyList
|
1622 kumpf 1.65 )
|
1623 kumpf 1.54 {
1624 return _rep->associators(
1625 nameSpace,
1626 objectName,
1627 assocClass,
1628 resultClass,
1629 role,
1630 resultRole,
1631 includeQualifiers,
1632 includeClassOrigin,
1633 propertyList);
1634 }
1635
|
1636 kumpf 1.56 Array<CIMObjectPath> CIMClient::associatorNames(
|
1637 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1638 kumpf 1.56 const CIMObjectPath& objectName,
|
1639 kumpf 1.64 const CIMName& assocClass,
1640 const CIMName& resultClass,
|
1641 kumpf 1.54 const String& role,
1642 const String& resultRole
|
1643 kumpf 1.65 )
|
1644 kumpf 1.54 {
1645 return _rep->associatorNames(
1646 nameSpace,
1647 objectName,
1648 assocClass,
1649 resultClass,
1650 role,
1651 resultRole);
1652 }
1653
|
1654 kumpf 1.61 Array<CIMObject> CIMClient::references(
|
1655 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1656 kumpf 1.56 const CIMObjectPath& objectName,
|
1657 kumpf 1.64 const CIMName& resultClass,
|
1658 kumpf 1.54 const String& role,
1659 Boolean includeQualifiers,
1660 Boolean includeClassOrigin,
1661 const CIMPropertyList& propertyList
|
1662 kumpf 1.65 )
|
1663 kumpf 1.54 {
1664 return _rep->references(
1665 nameSpace,
1666 objectName,
1667 resultClass,
1668 role,
1669 includeQualifiers,
1670 includeClassOrigin,
1671 propertyList);
1672 }
1673
|
1674 kumpf 1.56 Array<CIMObjectPath> CIMClient::referenceNames(
|
1675 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1676 kumpf 1.56 const CIMObjectPath& objectName,
|
1677 kumpf 1.64 const CIMName& resultClass,
|
1678 kumpf 1.54 const String& role
|
1679 kumpf 1.65 )
|
1680 kumpf 1.54 {
1681 return _rep->referenceNames(
1682 nameSpace,
1683 objectName,
1684 resultClass,
1685 role);
1686 }
1687
1688 CIMValue CIMClient::getProperty(
|
1689 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1690 kumpf 1.56 const CIMObjectPath& instanceName,
|
1691 kumpf 1.64 const CIMName& propertyName
|
1692 kumpf 1.65 )
|
1693 kumpf 1.54 {
1694 return _rep->getProperty(
1695 nameSpace,
1696 instanceName,
1697 propertyName);
1698 }
1699
1700 void CIMClient::setProperty(
|
1701 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1702 kumpf 1.56 const CIMObjectPath& instanceName,
|
1703 kumpf 1.64 const CIMName& propertyName,
|
1704 kumpf 1.54 const CIMValue& newValue
|
1705 kumpf 1.65 )
|
1706 kumpf 1.54 {
1707 _rep->setProperty(
1708 nameSpace,
1709 instanceName,
1710 propertyName,
1711 newValue);
1712 }
1713
1714 CIMQualifierDecl CIMClient::getQualifier(
|
1715 kumpf 1.64 const CIMNamespaceName& nameSpace,
1716 const CIMName& qualifierName
|
1717 kumpf 1.65 )
|
1718 kumpf 1.54 {
1719 return _rep->getQualifier(
1720 nameSpace,
1721 qualifierName);
1722 }
1723
1724 void CIMClient::setQualifier(
|
1725 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1726 kumpf 1.54 const CIMQualifierDecl& qualifierDeclaration
|
1727 kumpf 1.65 )
|
1728 kumpf 1.54 {
1729 _rep->setQualifier(
1730 nameSpace,
1731 qualifierDeclaration);
1732 }
1733
1734 void CIMClient::deleteQualifier(
|
1735 kumpf 1.64 const CIMNamespaceName& nameSpace,
1736 const CIMName& qualifierName
|
1737 kumpf 1.65 )
|
1738 kumpf 1.54 {
1739 _rep->deleteQualifier(
1740 nameSpace,
1741 qualifierName);
1742 }
1743
1744 Array<CIMQualifierDecl> CIMClient::enumerateQualifiers(
|
1745 kumpf 1.64 const CIMNamespaceName& nameSpace
|
1746 kumpf 1.65 )
|
1747 kumpf 1.54 {
1748 return _rep->enumerateQualifiers(
1749 nameSpace);
1750 }
1751
1752 CIMValue CIMClient::invokeMethod(
|
1753 kumpf 1.64 const CIMNamespaceName& nameSpace,
|
1754 kumpf 1.56 const CIMObjectPath& instanceName,
|
1755 kumpf 1.64 const CIMName& methodName,
|
1756 kumpf 1.54 const Array<CIMParamValue>& inParameters,
1757 Array<CIMParamValue>& outParameters
|
1758 kumpf 1.65 )
|
1759 kumpf 1.54 {
1760 return _rep->invokeMethod(
1761 nameSpace,
1762 instanceName,
1763 methodName,
1764 inParameters,
1765 outParameters);
|
1766 mike 1.27 }
1767
1768 PEGASUS_NAMESPACE_END
|