1 karl 1.54 //%2006////////////////////////////////////////////////////////////////////////
|
2 kumpf 1.1 //
|
3 karl 1.33 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
6 karl 1.3 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.33 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.36 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 karl 1.54 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
|
13 kumpf 1.1 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
|
20 karl 1.54 //
|
21 kumpf 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 // Author: Jair Santos, Hewlett-Packard Company (jair.santos@hp.com)
33 //
|
34 david.dillard 1.42 // Modified By: Dan Gorey (djgorey@us.ibm.com)
35 // Amit Arora (amita@in.ibm.com) for Bug#1170
36 // Marek Szermutzky (MSzermutzky@de.ibm.com) for PEP#139 Stage1
37 // Seema Gupta (gseema@in.ibm.com) for PEP135
|
38 brian.campbell 1.25 // Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase1
|
39 david.dillard 1.42 // Robert Kieninger, IBM (kieningr@de.ibm.com) for Bug#667
40 // Amit Arora (amita@in.ibm.com) for Bug#2040
41 // Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
42 // Willis White, IBM <whiwill@us.ibm.com)
43 // Josephine Eskaline Joyce, IBM <jojustin@in.ibm.com) for Bug#2108
|
44 david.dillard 1.49 // David Dillard, Symantec Corp. (david_dillard@symantec.com)
|
45 j.alex 1.47 // John Alex, IBM (johnalex@us.ibm.com) - Bug#2290
|
46 kumpf 1.1 //
47 //%/////////////////////////////////////////////////////////////////////////////
48
49 #include "CIMClientRep.h"
50
51 // l10n
52 #include <Pegasus/Common/MessageLoader.h>
|
53 joyce.j 1.41 #include <Pegasus/Common/System.h>
|
54 kumpf 1.51 #include <Pegasus/Common/LanguageParser.h>
|
55 kumpf 1.1
56 #include <iostream>
57 #include <fstream>
|
58 mike 1.55 #include <Pegasus/Common/Network.h>
|
59 kumpf 1.1
60 PEGASUS_USING_STD;
61
62 PEGASUS_NAMESPACE_BEGIN
63
64 ///////////////////////////////////////////////////////////////////////////////
65 //
66 // CIMClientRep
67 //
68 ///////////////////////////////////////////////////////////////////////////////
69
70 CIMClientRep::CIMClientRep(Uint32 timeoutMilliseconds)
71 :
72 MessageQueue(PEGASUS_QUEUENAME_CLIENT),
73 _timeoutMilliseconds(timeoutMilliseconds),
|
74 a.arora 1.31 _connected(false)
|
75 kumpf 1.1 {
76 //
77 // Create Monitor and HTTPConnector
78 //
|
79 a.arora 1.31 _monitor.reset(new Monitor());
80 _httpConnector.reset(new HTTPConnector(_monitor.get()));
|
81 kumpf 1.1
82 // l10n
|
83 kumpf 1.51 requestAcceptLanguages.clear();
84 requestContentLanguages.clear();
|
85 kumpf 1.1 }
86
87 CIMClientRep::~CIMClientRep()
88 {
89 disconnect();
90 }
91
92 void CIMClientRep::handleEnqueue()
93 {
94
95 }
96
97 Uint32 _getShowType(String& s)
98 {
99 String log = "log";
100 String con = "con";
101 String both = "both";
102 if (s == log)
|
103 tony 1.7 return 2;
104 if (s == con)
|
105 karl 1.6 return 1;
|
106 kumpf 1.1 if (s == both)
|
107 karl 1.6 return 3;
|
108 kumpf 1.1 return 0;
109 }
110
|
111 a.arora 1.32 void CIMClientRep::_connect()
|
112 kumpf 1.1 {
113 //
114 // Test for Display optons of the form
115 // Use Env variable PEGASUS_CLIENT_TRACE= <intrace> : <outtrace
116 // intrace = "con" | "log" | "both"
117 // outtrace = intrace
118 // ex set PEGASUS_CLIENT_TRACE=BOTH:BOTH traces input and output
119 // to console and log
120 // Keywords are case insensitive.
121 // PEP 90
122 //
123 Uint32 showOutput = 0;
124 Uint32 showInput = 0;
125 #ifdef PEGASUS_CLIENT_TRACE_ENABLE
126 String input;
127 if (char * envVar = getenv("PEGASUS_CLIENT_TRACE"))
128 {
129 input = envVar;
130 input.toLower();
131 String io = String::EMPTY;
132 Uint32 pos = input.find(':');
133 kumpf 1.1 if (pos == PEG_NOT_FOUND)
134 pos = 0;
135 else
136 io = input.subString(0,pos);
137
|
138 tony 1.5 // some compilers do not allow temporaries to be passed to a
139 // reference argument - so break into 2 lines
140 String out = input.subString(pos + 1);
141 showOutput = _getShowType(out);
|
142 kumpf 1.1
143 showInput = _getShowType(io);
144 }
145 #endif
146
147 //
148 // Create response decoder:
149 //
|
150 david.dillard 1.42 AutoPtr<CIMOperationResponseDecoder> responseDecoder(new
|
151 a.arora 1.31 CIMOperationResponseDecoder(this, _requestEncoder.get(), &_authenticator
152 , showInput));
|
153 kumpf 1.1
154 //
155 // Attempt to establish a connection:
156 //
|
157 a.arora 1.31 AutoPtr<HTTPConnection> httpConnection(_httpConnector->connect(
158 _connectHost,
159 _connectPortNumber,
160 _connectSSLContext.get(),
161 responseDecoder.get()));
|
162 david.dillard 1.42
|
163 kumpf 1.1 //
164 // Create request encoder:
165 //
|
166 kumpf 1.30 String connectHost = _connectHost;
167 if (connectHost.size())
168 {
169 char portStr[32];
170 sprintf(portStr, ":%u", _connectPortNumber);
171 connectHost.append(portStr);
172 }
173
|
174 a.arora 1.31 AutoPtr<CIMOperationRequestEncoder> requestEncoder(new CIMOperationRequestEncoder(
175 httpConnection.get(), connectHost, &_authenticator, showOutput));
|
176 david.dillard 1.42
|
177 a.arora 1.31 _responseDecoder.reset(responseDecoder.release());
|
178 denise.eckstein 1.46 _httpConnection = httpConnection.release();
|
179 a.arora 1.31 _requestEncoder.reset(requestEncoder.release());
180 _responseDecoder->setEncoderQueue(_requestEncoder.get());
|
181 a.dunfey 1.53
182 //pass endcoder and decoder a pointer to CIMClientRep::perfDataStore
183 _requestEncoder->setDataStorePointer(&perfDataStore);
184 _responseDecoder->setDataStorePointer(&perfDataStore);
185
|
186 kumpf 1.1 _connected = true;
|
187 marek 1.56 _httpConnection->setSocketWriteTimeout(_timeoutMilliseconds/1000+1);
|
188 kumpf 1.1 }
189
|
190 kumpf 1.8 void CIMClientRep::_disconnect()
191 {
192 if (_connected)
193 {
194 //
195 // destroy response decoder
196 //
|
197 a.arora 1.31 _responseDecoder.reset();
|
198 david.dillard 1.42
|
199 kumpf 1.8
200 //
201 // Close the connection
202 //
|
203 a.arora 1.31 if (_httpConnector.get())
|
204 kumpf 1.8 {
|
205 denise.eckstein 1.46 _httpConnector->disconnect(_httpConnection);
206 _httpConnection = 0;
|
207 kumpf 1.8 }
208
|
209 a.arora 1.31
|
210 kumpf 1.8 //
211 // destroy request encoder
212 //
|
213 a.arora 1.31 _requestEncoder.reset();
|
214 kumpf 1.8
215 _connected = false;
216 }
217 }
218
|
219 kumpf 1.1 void CIMClientRep::_reconnect()
220 {
|
221 kumpf 1.8 _disconnect();
|
222 mateus.baur 1.50 _authenticator.clearReconnect();
|
223 a.arora 1.32 _connect();
|
224 kumpf 1.1 }
225
226 void CIMClientRep::connect(
227 const String& host,
228 const Uint32 portNumber,
229 const String& userName,
230 const String& password
231 )
232 {
233 //
234 // If already connected, bail out!
235 //
236 if (_connected)
237 throw AlreadyConnectedException();
238
239 //
240 // If the host is empty, set hostName to "localhost"
241 //
242 String hostName = host;
243 if (host == String::EMPTY)
244 {
245 kumpf 1.1 hostName = "localhost";
246 }
247
248 //
249 // Set authentication information
250 //
|
251 kumpf 1.8 _authenticator.clear();
|
252 kumpf 1.1
253 if (userName.size())
254 {
255 _authenticator.setUserName(userName);
256 }
257
258 if (password.size())
259 {
260 _authenticator.setPassword(password);
261 }
262
|
263 a.arora 1.31 _connectSSLContext.reset();
|
264 kumpf 1.1 _connectHost = hostName;
265 _connectPortNumber = portNumber;
266
|
267 a.arora 1.32 _connect();
|
268 kumpf 1.1 }
269
270
271 void CIMClientRep::connect(
272 const String& host,
273 const Uint32 portNumber,
274 const SSLContext& sslContext,
275 const String& userName,
276 const String& password
277 )
278 {
279 //
280 // If already connected, bail out!
281 //
282 if (_connected)
283 throw AlreadyConnectedException();
284
285 //
286 // If the host is empty, set hostName to "localhost"
287 //
288 String hostName = host;
289 kumpf 1.1 if (host == String::EMPTY)
290 {
291 hostName = "localhost";
292 }
293
294 //
295 // Set authentication information
296 //
|
297 kumpf 1.8 _authenticator.clear();
|
298 kumpf 1.1
299 if (userName.size())
300 {
301 _authenticator.setUserName(userName);
302 }
303
304 if (password.size())
305 {
306 _authenticator.setPassword(password);
307 }
308
309 _connectHost = hostName;
310 _connectPortNumber = portNumber;
311
|
312 a.arora 1.32 _connectSSLContext.reset(new SSLContext(sslContext));
313 _connect();
|
314 kumpf 1.1 }
315
316
317 void CIMClientRep::connectLocal()
318 {
319 //
320 // If already connected, bail out!
321 //
322 if (_connected)
323 throw AlreadyConnectedException();
324
325 //
326 // Set authentication type
327 //
|
328 kumpf 1.8 _authenticator.clear();
|
329 kumpf 1.1 _authenticator.setAuthType(ClientAuthenticator::LOCAL);
330
|
331 h.sterling 1.43 #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
|
332 a.arora 1.31 _connectSSLContext.reset();
|
333 kumpf 1.30 _connectHost = String::EMPTY;
334 _connectPortNumber = 0;
|
335 a.arora 1.32 _connect();
|
336 kumpf 1.1 #else
337
338 try
339 {
340 //
341 // Look up the WBEM HTTP port number for the local system
342 //
343 _connectPortNumber = System::lookupPort (WBEM_HTTP_SERVICE_NAME,
344 WBEM_DEFAULT_HTTP_PORT);
345
346 //
347 // Assign host
348 //
349 _connectHost.assign(_getLocalHostName());
350
|
351 a.arora 1.31 _connectSSLContext.reset();
|
352 kumpf 1.1
|
353 a.arora 1.32 _connect();
|
354 kumpf 1.1 }
|
355 david.dillard 1.42 catch(const CannotConnectException &)
|
356 kumpf 1.1 {
357 //
358 // Look up the WBEM HTTPS port number for the local system
359 //
360 _connectPortNumber = System::lookupPort (WBEM_HTTPS_SERVICE_NAME,
361 WBEM_DEFAULT_HTTPS_PORT);
362
363 //
364 // Assign host
365 //
366 _connectHost.assign(_getLocalHostName());
367
368 //
369 // Create SSLContext
370 //
371 #ifdef PEGASUS_OS_OS400
372 #pragma convert(37)
373 const char* env = getenv("PEGASUS_HOME");
374 #pragma convert(0)
375 char pegasusHome[256] = {0};
376 if (env != NULL && strlen(env) < 256)
377 kumpf 1.1 {
378 strcpy(pegasusHome, env);
379 EtoA(pegasusHome);
380 }
381 #else
382 const char* pegasusHome = getenv("PEGASUS_HOME");
383 #endif
384
385 String randFile = String::EMPTY;
386
387 #ifdef PEGASUS_SSL_RANDOMFILE
388 randFile = FileSystem::getAbsolutePath(
389 pegasusHome, PEGASUS_SSLCLIENT_RANDOMFILE);
390 #endif
391
392 try
393 {
|
394 a.arora 1.32 _connectSSLContext.reset(
|
395 kumpf 1.28 new SSLContext(String::EMPTY, NULL, randFile));
|
396 kumpf 1.1 }
|
397 david.dillard 1.44 catch (const SSLException &)
|
398 kumpf 1.1 {
|
399 david.dillard 1.44 throw;
|
400 kumpf 1.1 }
401
|
402 a.arora 1.32 _connect();
|
403 kumpf 1.1 }
404 #endif
405 }
406
407
408 void CIMClientRep::disconnect()
409 {
|
410 kumpf 1.8 _disconnect();
411 _authenticator.clear();
|
412 kumpf 1.28 _connectSSLContext.reset();
|
413 kumpf 1.8 }
|
414 kumpf 1.1
|
415 david.dillard 1.42 Boolean CIMClientRep::isConnected() const throw()
|
416 marek 1.21 {
|
417 david.dillard 1.42 return _connected;
|
418 marek 1.21 }
419
420
|
421 kumpf 1.1 // l10n start
|
422 kumpf 1.52 AcceptLanguageList CIMClientRep::getRequestAcceptLanguages() const
|
423 kumpf 1.1 {
424 return requestAcceptLanguages;
425 }
426
|
427 kumpf 1.52 ContentLanguageList CIMClientRep::getRequestContentLanguages() const
|
428 kumpf 1.1 {
429 return requestContentLanguages;
430 }
431
|
432 kumpf 1.52 ContentLanguageList CIMClientRep::getResponseContentLanguages() const
|
433 kumpf 1.1 {
434 return responseContentLanguages;
435 }
436
|
437 kumpf 1.52 void CIMClientRep::setRequestAcceptLanguages(const AcceptLanguageList& langs)
|
438 kumpf 1.1 {
439 requestAcceptLanguages = langs;
440 }
441
|
442 kumpf 1.52 void CIMClientRep::setRequestContentLanguages(const ContentLanguageList& langs)
|
443 kumpf 1.1 {
444 requestContentLanguages = langs;
445 }
446
447 void CIMClientRep::setRequestDefaultLanguages()
448 {
|
449 kumpf 1.51 requestAcceptLanguages = LanguageParser::getDefaultAcceptLanguages();
|
450 kumpf 1.1 }
451
452 // l10n end
453
454 CIMClass CIMClientRep::getClass(
455 const CIMNamespaceName& nameSpace,
456 const CIMName& className,
457 Boolean localOnly,
458 Boolean includeQualifiers,
459 Boolean includeClassOrigin,
460 const CIMPropertyList& propertyList
461 )
462 {
|
463 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMGetClassRequestMessage(
|
464 kumpf 1.1 String::EMPTY,
465 nameSpace,
466 className,
467 localOnly,
468 includeQualifiers,
469 includeClassOrigin,
470 propertyList,
|
471 a.arora 1.31 QueueIdStack()));
|
472 kumpf 1.1
473 Message* message = _doRequest(request, CIM_GET_CLASS_RESPONSE_MESSAGE);
474
475 CIMGetClassResponseMessage* response =
476 (CIMGetClassResponseMessage*)message;
477
|
478 a.arora 1.31 AutoPtr<CIMGetClassResponseMessage> destroyer(response);
|
479 kumpf 1.1
480 return(response->cimClass);
481 }
482
483 CIMInstance CIMClientRep::getInstance(
484 const CIMNamespaceName& nameSpace,
485 const CIMObjectPath& instanceName,
486 Boolean localOnly,
487 Boolean includeQualifiers,
488 Boolean includeClassOrigin,
489 const CIMPropertyList& propertyList
490 )
491 {
|
492 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMGetInstanceRequestMessage(
|
493 kumpf 1.1 String::EMPTY,
494 nameSpace,
495 instanceName,
496 localOnly,
497 includeQualifiers,
498 includeClassOrigin,
499 propertyList,
|
500 a.arora 1.31 QueueIdStack()));
|
501 kumpf 1.1
502 Message* message = _doRequest(request, CIM_GET_INSTANCE_RESPONSE_MESSAGE);
503
504 CIMGetInstanceResponseMessage* response =
505 (CIMGetInstanceResponseMessage*)message;
506
|
507 a.arora 1.31 AutoPtr<CIMGetInstanceResponseMessage> destroyer(response);
|
508 kumpf 1.1
509 return(response->cimInstance);
510 }
511
512 void CIMClientRep::deleteClass(
513 const CIMNamespaceName& nameSpace,
514 const CIMName& className
515 )
516 {
|
517 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMDeleteClassRequestMessage(
|
518 kumpf 1.1 String::EMPTY,
519 nameSpace,
520 className,
|
521 a.arora 1.31 QueueIdStack()));
|
522 kumpf 1.1
523 Message* message = _doRequest(request, CIM_DELETE_CLASS_RESPONSE_MESSAGE);
524
525 CIMDeleteClassResponseMessage* response =
526 (CIMDeleteClassResponseMessage*)message;
527
|
528 a.arora 1.31 AutoPtr<CIMDeleteClassResponseMessage> destroyer(response);
|
529 kumpf 1.1 }
530
531 void CIMClientRep::deleteInstance(
532 const CIMNamespaceName& nameSpace,
533 const CIMObjectPath& instanceName
534 )
535 {
|
536 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMDeleteInstanceRequestMessage(
|
537 kumpf 1.1 String::EMPTY,
538 nameSpace,
539 instanceName,
|
540 a.arora 1.31 QueueIdStack()));
|
541 kumpf 1.1
542 Message* message = _doRequest(request, CIM_DELETE_INSTANCE_RESPONSE_MESSAGE);
543
544 CIMDeleteInstanceResponseMessage* response =
545 (CIMDeleteInstanceResponseMessage*)message;
546
|
547 a.arora 1.31 AutoPtr<CIMDeleteInstanceResponseMessage> destroyer(response);
|
548 kumpf 1.1 }
549
550 void CIMClientRep::createClass(
551 const CIMNamespaceName& nameSpace,
552 const CIMClass& newClass
553 )
554 {
|
555 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMCreateClassRequestMessage(
|
556 kumpf 1.1 String::EMPTY,
557 nameSpace,
558 newClass,
|
559 a.arora 1.31 QueueIdStack()));
|
560 kumpf 1.1
561 Message* message = _doRequest(request, CIM_CREATE_CLASS_RESPONSE_MESSAGE);
562
563 CIMCreateClassResponseMessage* response =
564 (CIMCreateClassResponseMessage*)message;
565
|
566 a.arora 1.31 AutoPtr<CIMCreateClassResponseMessage> destroyer(response);
|
567 kumpf 1.1 }
568
569 CIMObjectPath CIMClientRep::createInstance(
570 const CIMNamespaceName& nameSpace,
571 const CIMInstance& newInstance
572 )
573 {
|
574 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMCreateInstanceRequestMessage(
|
575 kumpf 1.1 String::EMPTY,
576 nameSpace,
577 newInstance,
|
578 a.arora 1.31 QueueIdStack()));
|
579 kumpf 1.1
580 Message* message = _doRequest(request, CIM_CREATE_INSTANCE_RESPONSE_MESSAGE);
581
582 CIMCreateInstanceResponseMessage* response =
583 (CIMCreateInstanceResponseMessage*)message;
584
|
585 a.arora 1.31 AutoPtr<CIMCreateInstanceResponseMessage> destroyer(response);
|
586 kumpf 1.1
587 return(response->instanceName);
588 }
589
590 void CIMClientRep::modifyClass(
591 const CIMNamespaceName& nameSpace,
592 const CIMClass& modifiedClass
593 )
594 {
|
595 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMModifyClassRequestMessage(
|
596 kumpf 1.1 String::EMPTY,
597 nameSpace,
598 modifiedClass,
|
599 a.arora 1.31 QueueIdStack()));
|
600 kumpf 1.1
601 Message* message = _doRequest(request, CIM_MODIFY_CLASS_RESPONSE_MESSAGE);
602
603 CIMModifyClassResponseMessage* response =
604 (CIMModifyClassResponseMessage*)message;
605
|
606 a.arora 1.31 AutoPtr<CIMModifyClassResponseMessage> destroyer(response);
|
607 kumpf 1.1 }
608
609 void CIMClientRep::modifyInstance(
610 const CIMNamespaceName& nameSpace,
611 const CIMInstance& modifiedInstance,
612 Boolean includeQualifiers,
613 const CIMPropertyList& propertyList
614 )
615 {
|
616 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMModifyInstanceRequestMessage(
|
617 kumpf 1.1 String::EMPTY,
618 nameSpace,
619 modifiedInstance,
620 includeQualifiers,
621 propertyList,
|
622 a.arora 1.31 QueueIdStack()));
|
623 kumpf 1.1
624 Message* message = _doRequest(request, CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE);
625
626 CIMModifyInstanceResponseMessage* response =
627 (CIMModifyInstanceResponseMessage*)message;
628
|
629 a.arora 1.31 AutoPtr<CIMModifyInstanceResponseMessage> destroyer(response);
|
630 kumpf 1.1 }
631
632 Array<CIMClass> CIMClientRep::enumerateClasses(
633 const CIMNamespaceName& nameSpace,
634 const CIMName& className,
635 Boolean deepInheritance,
636 Boolean localOnly,
637 Boolean includeQualifiers,
638 Boolean includeClassOrigin
639 )
640 {
|
641 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMEnumerateClassesRequestMessage(
|
642 kumpf 1.1 String::EMPTY,
643 nameSpace,
644 className,
645 deepInheritance,
646 localOnly,
647 includeQualifiers,
648 includeClassOrigin,
|
649 a.arora 1.31 QueueIdStack()));
|
650 kumpf 1.1
651 Message* message = _doRequest(request, CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE);
652
653 CIMEnumerateClassesResponseMessage* response =
654 (CIMEnumerateClassesResponseMessage*)message;
655
|
656 a.arora 1.31 AutoPtr<CIMEnumerateClassesResponseMessage> destroyer(response);
|
657 kumpf 1.1
658 return(response->cimClasses);
659 }
660
661 Array<CIMName> CIMClientRep::enumerateClassNames(
662 const CIMNamespaceName& nameSpace,
663 const CIMName& className,
664 Boolean deepInheritance
665 )
666 {
|
667 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMEnumerateClassNamesRequestMessage(
|
668 kumpf 1.1 String::EMPTY,
669 nameSpace,
670 className,
671 deepInheritance,
|
672 a.arora 1.31 QueueIdStack()));
|
673 kumpf 1.1
674 Message* message = _doRequest(request, CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE);
675
676 CIMEnumerateClassNamesResponseMessage* response =
677 (CIMEnumerateClassNamesResponseMessage*)message;
678
|
679 a.arora 1.31 AutoPtr<CIMEnumerateClassNamesResponseMessage> destroyer(response);
|
680 kumpf 1.1
681 // Temporary code until internal structures use CIMName instead of String
682 Array<CIMName> classNameArray;
683 classNameArray.reserveCapacity(response->classNames.size());
684 for (Uint32 i=0; i<response->classNames.size(); i++)
685 {
686 classNameArray.append(response->classNames[i]);
687 }
688 return(classNameArray);
689 }
690
691 Array<CIMInstance> CIMClientRep::enumerateInstances(
692 const CIMNamespaceName& nameSpace,
693 const CIMName& className,
694 Boolean deepInheritance,
695 Boolean localOnly,
696 Boolean includeQualifiers,
697 Boolean includeClassOrigin,
698 const CIMPropertyList& propertyList
699 )
700 {
|
701 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMEnumerateInstancesRequestMessage(
|
702 kumpf 1.1 String::EMPTY,
703 nameSpace,
704 className,
705 deepInheritance,
706 localOnly,
707 includeQualifiers,
708 includeClassOrigin,
709 propertyList,
|
710 a.arora 1.31 QueueIdStack()));
|
711 kumpf 1.1
712 Message* message = _doRequest(request, CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE);
713
714 CIMEnumerateInstancesResponseMessage* response =
715 (CIMEnumerateInstancesResponseMessage*)message;
716
|
717 a.arora 1.31 AutoPtr<CIMEnumerateInstancesResponseMessage> destroyer(response);
|
718 kumpf 1.1
719 return(response->cimNamedInstances);
720 }
721
722 Array<CIMObjectPath> CIMClientRep::enumerateInstanceNames(
723 const CIMNamespaceName& nameSpace,
724 const CIMName& className
725 )
726 {
|
727 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMEnumerateInstanceNamesRequestMessage(
|
728 kumpf 1.1 String::EMPTY,
729 nameSpace,
730 className,
|
731 a.arora 1.31 QueueIdStack()));
|
732 kumpf 1.1
733 Message* message = _doRequest(request, CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE);
734
735 CIMEnumerateInstanceNamesResponseMessage* response =
736 (CIMEnumerateInstanceNamesResponseMessage*)message;
737
|
738 a.arora 1.31 AutoPtr<CIMEnumerateInstanceNamesResponseMessage> destroyer(response);
|
739 kumpf 1.1
740 return(response->instanceNames);
741 }
742
743 Array<CIMObject> CIMClientRep::execQuery(
744 const CIMNamespaceName& nameSpace,
745 const String& queryLanguage,
746 const String& query
747 )
748 {
|
749 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMExecQueryRequestMessage(
|
750 kumpf 1.1 String::EMPTY,
751 nameSpace,
752 queryLanguage,
753 query,
|
754 a.arora 1.31 QueueIdStack()));
|
755 kumpf 1.1
756 Message* message = _doRequest(request, CIM_EXEC_QUERY_RESPONSE_MESSAGE);
757
758 CIMExecQueryResponseMessage* response =
759 (CIMExecQueryResponseMessage*)message;
760
|
761 a.arora 1.31 AutoPtr<CIMExecQueryResponseMessage> destroyer(response);
|
762 kumpf 1.1
763 return(response->cimObjects);
764 }
765
766 Array<CIMObject> CIMClientRep::associators(
767 const CIMNamespaceName& nameSpace,
768 const CIMObjectPath& objectName,
769 const CIMName& assocClass,
770 const CIMName& resultClass,
771 const String& role,
772 const String& resultRole,
773 Boolean includeQualifiers,
774 Boolean includeClassOrigin,
775 const CIMPropertyList& propertyList
776 )
777 {
|
778 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMAssociatorsRequestMessage(
|
779 kumpf 1.1 String::EMPTY,
780 nameSpace,
781 objectName,
782 assocClass,
783 resultClass,
784 role,
785 resultRole,
786 includeQualifiers,
787 includeClassOrigin,
788 propertyList,
|
789 a.arora 1.31 QueueIdStack()));
|
790 kumpf 1.1
791 Message* message = _doRequest(request, CIM_ASSOCIATORS_RESPONSE_MESSAGE);
792
793 CIMAssociatorsResponseMessage* response =
794 (CIMAssociatorsResponseMessage*)message;
795
|
796 a.arora 1.31 AutoPtr<CIMAssociatorsResponseMessage> destroyer(response);
|
797 kumpf 1.1
798 return(response->cimObjects);
799 }
800
801 Array<CIMObjectPath> CIMClientRep::associatorNames(
802 const CIMNamespaceName& nameSpace,
803 const CIMObjectPath& objectName,
804 const CIMName& assocClass,
805 const CIMName& resultClass,
806 const String& role,
807 const String& resultRole
808 )
809 {
|
810 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMAssociatorNamesRequestMessage(
|
811 kumpf 1.1 String::EMPTY,
812 nameSpace,
813 objectName,
814 assocClass,
815 resultClass,
816 role,
817 resultRole,
|
818 a.arora 1.31 QueueIdStack()));
|
819 kumpf 1.1
820 Message* message = _doRequest(request, CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE);
821
822 CIMAssociatorNamesResponseMessage* response =
823 (CIMAssociatorNamesResponseMessage*)message;
824
|
825 a.arora 1.31 AutoPtr<CIMAssociatorNamesResponseMessage> destroyer(response);
|
826 kumpf 1.1
827 return(response->objectNames);
828 }
829
830 Array<CIMObject> CIMClientRep::references(
831 const CIMNamespaceName& nameSpace,
832 const CIMObjectPath& objectName,
833 const CIMName& resultClass,
834 const String& role,
835 Boolean includeQualifiers,
836 Boolean includeClassOrigin,
837 const CIMPropertyList& propertyList
838 )
839 {
|
840 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMReferencesRequestMessage(
|
841 kumpf 1.1 String::EMPTY,
842 nameSpace,
843 objectName,
844 resultClass,
845 role,
846 includeQualifiers,
847 includeClassOrigin,
848 propertyList,
|
849 a.arora 1.31 QueueIdStack()));
|
850 kumpf 1.1
851 Message* message = _doRequest(request, CIM_REFERENCES_RESPONSE_MESSAGE);
852
853 CIMReferencesResponseMessage* response =
854 (CIMReferencesResponseMessage*)message;
855
|
856 a.arora 1.31 AutoPtr<CIMReferencesResponseMessage> destroyer(response);
|
857 kumpf 1.1
858 return(response->cimObjects);
859 }
860
861 Array<CIMObjectPath> CIMClientRep::referenceNames(
862 const CIMNamespaceName& nameSpace,
863 const CIMObjectPath& objectName,
864 const CIMName& resultClass,
865 const String& role
866 )
867 {
|
868 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMReferenceNamesRequestMessage(
|
869 kumpf 1.1 String::EMPTY,
870 nameSpace,
871 objectName,
872 resultClass,
873 role,
|
874 a.arora 1.31 QueueIdStack()));
|
875 kumpf 1.1
876 Message* message = _doRequest(request, CIM_REFERENCE_NAMES_RESPONSE_MESSAGE);
877
878 CIMReferenceNamesResponseMessage* response =
879 (CIMReferenceNamesResponseMessage*)message;
880
|
881 a.arora 1.31 AutoPtr<CIMReferenceNamesResponseMessage> destroyer(response);
|
882 kumpf 1.1
883 return(response->objectNames);
884 }
885
886 CIMValue CIMClientRep::getProperty(
887 const CIMNamespaceName& nameSpace,
888 const CIMObjectPath& instanceName,
889 const CIMName& propertyName
890 )
891 {
|
892 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMGetPropertyRequestMessage(
|
893 kumpf 1.1 String::EMPTY,
894 nameSpace,
895 instanceName,
896 propertyName,
|
897 a.arora 1.31 QueueIdStack()));
|
898 kumpf 1.1
899 Message* message = _doRequest(request, CIM_GET_PROPERTY_RESPONSE_MESSAGE);
900
901 CIMGetPropertyResponseMessage* response =
902 (CIMGetPropertyResponseMessage*)message;
903
|
904 a.arora 1.31 AutoPtr<CIMGetPropertyResponseMessage> destroyer(response);
|
905 kumpf 1.1
906 return(response->value);
907 }
908
909 void CIMClientRep::setProperty(
910 const CIMNamespaceName& nameSpace,
911 const CIMObjectPath& instanceName,
912 const CIMName& propertyName,
913 const CIMValue& newValue
914 )
915 {
|
916 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMSetPropertyRequestMessage(
|
917 kumpf 1.1 String::EMPTY,
918 nameSpace,
919 instanceName,
920 propertyName,
921 newValue,
|
922 a.arora 1.31 QueueIdStack()));
|
923 kumpf 1.1
924 Message* message = _doRequest(request, CIM_SET_PROPERTY_RESPONSE_MESSAGE);
925
926 CIMSetPropertyResponseMessage* response =
927 (CIMSetPropertyResponseMessage*)message;
928
|
929 a.arora 1.31 AutoPtr<CIMSetPropertyResponseMessage> destroyer(response);
|
930 kumpf 1.1 }
931
932 CIMQualifierDecl CIMClientRep::getQualifier(
933 const CIMNamespaceName& nameSpace,
934 const CIMName& qualifierName
935 )
936 {
|
937 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMGetQualifierRequestMessage(
|
938 kumpf 1.1 String::EMPTY,
939 nameSpace,
940 qualifierName,
|
941 a.arora 1.31 QueueIdStack()));
|
942 kumpf 1.1
943 Message* message = _doRequest(request, CIM_GET_QUALIFIER_RESPONSE_MESSAGE);
944
945 CIMGetQualifierResponseMessage* response =
946 (CIMGetQualifierResponseMessage*)message;
947
|
948 a.arora 1.31 AutoPtr<CIMGetQualifierResponseMessage> destroyer(response);
|
949 kumpf 1.1
950 return(response->cimQualifierDecl);
951 }
952
953 void CIMClientRep::setQualifier(
954 const CIMNamespaceName& nameSpace,
955 const CIMQualifierDecl& qualifierDeclaration
956 )
957 {
|
958 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMSetQualifierRequestMessage(
|
959 kumpf 1.1 String::EMPTY,
960 nameSpace,
961 qualifierDeclaration,
|
962 a.arora 1.31 QueueIdStack()));
|
963 kumpf 1.1
964 Message* message = _doRequest(request, CIM_SET_QUALIFIER_RESPONSE_MESSAGE);
965
966 CIMSetQualifierResponseMessage* response =
967 (CIMSetQualifierResponseMessage*)message;
968
|
969 a.arora 1.31 AutoPtr<CIMSetQualifierResponseMessage> destroyer(response);
|
970 kumpf 1.1 }
971
972 void CIMClientRep::deleteQualifier(
973 const CIMNamespaceName& nameSpace,
974 const CIMName& qualifierName
975 )
976 {
|
977 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMDeleteQualifierRequestMessage(
|
978 kumpf 1.1 String::EMPTY,
979 nameSpace,
980 qualifierName,
|
981 a.arora 1.31 QueueIdStack()));
|
982 kumpf 1.1
983 Message* message = _doRequest(request, CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE);
984
985 CIMDeleteQualifierResponseMessage* response =
986 (CIMDeleteQualifierResponseMessage*)message;
987
|
988 a.arora 1.31 AutoPtr<CIMDeleteQualifierResponseMessage> destroyer(response);
|
989 kumpf 1.1 }
990
991 Array<CIMQualifierDecl> CIMClientRep::enumerateQualifiers(
992 const CIMNamespaceName& nameSpace
993 )
994 {
|
995 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMEnumerateQualifiersRequestMessage(
|
996 kumpf 1.1 String::EMPTY,
997 nameSpace,
|
998 a.arora 1.31 QueueIdStack()));
|
999 kumpf 1.1
1000 Message* message = _doRequest(request, CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE);
1001
1002 CIMEnumerateQualifiersResponseMessage* response =
1003 (CIMEnumerateQualifiersResponseMessage*)message;
1004
|
1005 a.arora 1.31 AutoPtr<CIMEnumerateQualifiersResponseMessage> destroyer(response);
|
1006 kumpf 1.1
1007 return(response->qualifierDeclarations);
1008 }
1009
1010 CIMValue CIMClientRep::invokeMethod(
1011 const CIMNamespaceName& nameSpace,
1012 const CIMObjectPath& instanceName,
1013 const CIMName& methodName,
1014 const Array<CIMParamValue>& inParameters,
1015 Array<CIMParamValue>& outParameters
1016 )
1017 {
1018 // ATTN-RK-P2-20020301: Does it make sense to have a nameSpace parameter
1019 // when the namespace should already be included in the instanceName?
1020 // ATTN-RK-P3-20020301: Do we need to make sure the caller didn't specify
1021 // a host name in the instanceName?
1022
|
1023 david.dillard 1.42 // solved with PEP#139 Stage1 as other CIMOMs contained in the object path
1024 // will cause a TypeMisMatchException
|
1025 marek 1.12
|
1026 a.arora 1.31 AutoPtr<CIMRequestMessage> request(new CIMInvokeMethodRequestMessage(
|
1027 kumpf 1.1 String::EMPTY,
1028 nameSpace,
1029 instanceName,
1030 methodName,
1031 inParameters,
|
1032 a.arora 1.31 QueueIdStack()));
|
1033 kumpf 1.1
1034 Message* message = _doRequest(request, CIM_INVOKE_METHOD_RESPONSE_MESSAGE);
1035
1036 CIMInvokeMethodResponseMessage* response =
1037 (CIMInvokeMethodResponseMessage*)message;
1038
|
1039 a.arora 1.31 AutoPtr<CIMInvokeMethodResponseMessage> destroyer(response);
|
1040 kumpf 1.1
1041 outParameters = response->outParameters;
1042
1043 return(response->retValue);
1044 }
1045
1046 Message* CIMClientRep::_doRequest(
|
1047 a.arora 1.31 AutoPtr<CIMRequestMessage>& request,
|
1048 kumpf 1.1 const Uint32 expectedResponseMessageType
1049 )
1050 {
1051 if (!_connected)
1052 {
|
1053 a.arora 1.31 request.reset();
|
1054 kumpf 1.1 throw NotConnectedException();
1055 }
1056
1057 String messageId = XmlWriter::getNextMessageId();
1058 const_cast<String &>(request->messageId) = messageId;
1059
|
1060 kumpf 1.8 _authenticator.setRequestMessage(0);
|
1061 kumpf 1.1
1062 // ATTN-RK-P2-20020416: We should probably clear out the queue first.
1063 PEGASUS_ASSERT(getCount() == 0); // Shouldn't be any messages in our queue
1064
1065 //
|
1066 karl 1.2 // Set HTTP method in request to POST
|
1067 kumpf 1.1 //
|
1068 david.dillard 1.42 //Bug 478/418 - Change this to do post call, not mpost
|
1069 karl 1.2 request->setHttpMethod (HTTP_METHOD__POST);
|
1070 kumpf 1.1
1071 // l10n
1072 // Set the Accept-Languages and Content-Languages into
1073 // the request message
1074
|
1075 david.dillard 1.42 request->operationContext.set(AcceptLanguageListContainer(requestAcceptLanguages));
|
1076 r.kieninger 1.29 request->operationContext.set(ContentLanguageListContainer(requestContentLanguages));
|
1077 se.gupta 1.22
1078
|
1079 w.white 1.35 //gathering statistical information about client operation
|
1080 a.dunfey 1.53 perfDataStore.reset();
1081 perfDataStore.setOperationType(request->getType());
1082 perfDataStore.setMessageID(request->messageId);
|
1083 w.white 1.35
|
1084 kumpf 1.1 // Sending a new request, so clear out the response Content-Languages
|
1085 kumpf 1.51 responseContentLanguages.clear();
|
1086 kumpf 1.1
|
1087 a.arora 1.32 _requestEncoder->enqueue(request.get());
1088 request.release();
|
1089 kumpf 1.1
1090 Uint64 startMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
1091 Uint64 nowMilliseconds = startMilliseconds;
1092 Uint64 stopMilliseconds = nowMilliseconds + _timeoutMilliseconds;
1093
1094 while (nowMilliseconds < stopMilliseconds)
1095 {
1096 //
1097 // Wait until the timeout expires or an event occurs:
1098 //
|
1099 kumpf 1.34 _monitor->run(Uint32(stopMilliseconds - nowMilliseconds));
|
1100 kumpf 1.1
1101 //
1102 // Check to see if incoming queue has a message
1103 //
1104
1105 Message* response = dequeue();
1106
1107 if (response)
1108 {
1109 // Shouldn't be any more messages in our queue
1110 PEGASUS_ASSERT(getCount() == 0);
1111
1112 //
|
1113 j.alex 1.47 // Reconnect to reset the connection
1114 // if Server response contained a Connection: Close Header
1115 //
|
1116 j.alex 1.48 if (response->getCloseConnect() == true){
|
1117 j.alex 1.47 _reconnect();
|
1118 j.alex 1.48 response->setCloseConnect(false);
|
1119 j.alex 1.47 }
1120
1121 //
|
1122 kumpf 1.4 // Future: If M-POST is used and HTTP response is 501 Not
1123 // Implemented or 510 Not Extended, retry with POST method
|
1124 kumpf 1.1 //
1125
1126 if (response->getType() == CLIENT_EXCEPTION_MESSAGE)
1127 {
|
1128 j.alex 1.47
|
1129 kumpf 1.1 Exception* clientException =
1130 ((ClientExceptionMessage*)response)->clientException;
1131 delete response;
|
1132 kumpf 1.4
|
1133 a.arora 1.31 AutoPtr<Exception> d(clientException);
|
1134 kumpf 1.4
|
1135 david.dillard 1.42 // Make the ContentLanguage of the exception available through
1136 // the CIMClient API (its also available in the exception).
1137 responseContentLanguages = clientException->getContentLanguages();
|
1138 chuck 1.27
|
1139 kumpf 1.4 //
1140 // Determine and throw the specific class of client exception
1141 //
1142
1143 CIMClientMalformedHTTPException* malformedHTTPException =
1144 dynamic_cast<CIMClientMalformedHTTPException*>(
1145 clientException);
1146 if (malformedHTTPException)
1147 {
1148 throw *malformedHTTPException;
1149 }
1150
1151 CIMClientHTTPErrorException* httpErrorException =
1152 dynamic_cast<CIMClientHTTPErrorException*>(
1153 clientException);
1154 if (httpErrorException)
1155 {
1156 throw *httpErrorException;
1157 }
1158
1159 CIMClientXmlException* xmlException =
1160 kumpf 1.4 dynamic_cast<CIMClientXmlException*>(clientException);
1161 if (xmlException)
1162 {
1163 throw *xmlException;
1164 }
1165
1166 CIMClientResponseException* responseException =
1167 dynamic_cast<CIMClientResponseException*>(clientException);
1168 if (responseException)
1169 {
1170 throw *responseException;
1171 }
1172
|
1173 david.dillard 1.42 CIMException* cimException =
|
1174 brian.campbell 1.25 dynamic_cast<CIMException*>(clientException);
1175 if (cimException)
1176 {
1177 throw *cimException;
1178 }
1179
|
1180 kumpf 1.1 throw *clientException;
1181 }
1182 else if (response->getType() == expectedResponseMessageType)
1183 {
1184 CIMResponseMessage* cimResponse = (CIMResponseMessage*)response;
1185
1186 if (cimResponse->messageId != messageId)
1187 {
1188 // l10n
1189
1190 // CIMClientResponseException responseException(
1191 // String("Mismatched response message ID: Got \"") +
1192 // cimResponse->messageId + "\", expected \"" +
1193 // messageId + "\".");
1194
1195 MessageLoaderParms mlParms(
1196 "Client.CIMClient.MISMATCHED_RESPONSE",
1197 "Mismatched response message ID: Got \"$0\", "
1198 "expected \"$1\".",
1199 cimResponse->messageId, messageId);
1200 String mlString(MessageLoader::getMessage(mlParms));
1201 kumpf 1.1
1202 CIMClientResponseException responseException(mlString);
1203
1204 delete response;
1205 throw responseException;
1206 }
1207
|
1208 david.dillard 1.42 // l10n
|
1209 se.gupta 1.24 // Get the Content-Languages from the response's operationContext
|
1210 david.dillard 1.42 // and make available through the CIMClient API
|
1211 chuck 1.27 responseContentLanguages =
|
1212 david.dillard 1.42 ((ContentLanguageListContainer)cimResponse->operationContext.get
1213 (ContentLanguageListContainer::NAME)).getLanguages();
|
1214 kumpf 1.1
1215 if (cimResponse->cimException.getCode() != CIM_ERR_SUCCESS)
1216 {
1217 CIMException cimException(
1218 cimResponse->cimException.getCode(),
1219 cimResponse->cimException.getMessage());
|
1220 david.dillard 1.42 cimException.setContentLanguages(responseContentLanguages);
|
1221 kumpf 1.1 delete response;
1222 throw cimException;
1223 }
|
1224 w.white 1.37
1225 /* if excicution gets here everytihng is working correctly and a proper response
1226 was generated and recived */
1227
|
1228 david.dillard 1.42 //check that client side statistics are valid before handing them to the
|
1229 w.white 1.37 // client application via a call back
|
1230 a.dunfey 1.53 Boolean re_check = perfDataStore.checkMessageIDandType(cimResponse->messageId,
|
1231 w.white 1.37 cimResponse->getType());
|
1232 a.dunfey 1.53
1233 if (re_check && !perfDataStore.getStatError() && perfDataStore.isClassRegistered())
|
1234 david.dillard 1.42 {
|
1235 w.white 1.40 //if callback method throws an exception it will be seen by the client
1236 //no try/catch block is used here intentionaly - becasue exceptions
|
1237 david.dillard 1.42 //come from the client application so client app. should handle them
|
1238 a.dunfey 1.53 ClientOpPerformanceData item = perfDataStore.createPerfDataStruct();
1239 perfDataStore.handler_prt->handleClientOpPerformanceData(item);
|
1240 david.dillard 1.42
|
1241 w.white 1.37 }//end of if statmet that call the callback method
|
1242 kumpf 1.1 return response;
1243 }
|
1244 j.alex 1.48 else if (dynamic_cast<CIMRequestMessage*>(response) != 0)
1245 {
1246 // Respond to an authentication challenge
1247 _requestEncoder->enqueue(response);
1248 nowMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
1249 stopMilliseconds = nowMilliseconds + _timeoutMilliseconds;
1250 continue;
1251 }
|
1252 kumpf 1.1 else
1253 {
1254 // l10n
1255
1256 // CIMClientResponseException responseException(
1257 // "Mismatched response message type.");
1258 MessageLoaderParms mlParms(
|
1259 j.alex 1.48 "Client.CIMOperationResponseDecoder.MISMATCHED_RESPONSE_TYPE",
1260 "Mismatched response message type.");
|
1261 kumpf 1.1 String mlString(MessageLoader::getMessage(mlParms));
1262
1263 CIMClientResponseException responseException(mlString);
1264
1265 delete response;
1266 throw responseException;
1267 }
1268 }
1269
1270 nowMilliseconds = TimeValue::getCurrentTime().toMilliseconds();
|
1271 mike 1.58 Threads::yield();
|
1272 kumpf 1.1 }
1273
1274 //
1275 // Reconnect to reset the connection (disregard late response)
1276 //
1277 try
1278 {
1279 _reconnect();
1280 }
1281 catch (...)
1282 {
1283 }
1284
1285 //
1286 // Throw timed out exception:
1287 //
1288 throw ConnectionTimeoutException();
1289 }
1290
1291 String CIMClientRep::_getLocalHostName()
1292 {
|
1293 joyce.j 1.41 static String hostname;
1294
1295 if (!hostname.size())
1296 {
1297 hostname.assign(System::getHostName());
1298 }
|
1299 kumpf 1.1
1300 return hostname;
|
1301 marek 1.12 }
1302
|
1303 w.white 1.37
1304 void CIMClientRep::registerClientOpPerformanceDataHandler(ClientOpPerformanceDataHandler & handler)
|
1305 david.dillard 1.42 {
|
1306 a.dunfey 1.53 perfDataStore.handler_prt = &handler;
1307 perfDataStore.setClassRegistered(true);
|
1308 w.white 1.37 }
|
1309 david.dillard 1.42
|
1310 w.white 1.37
1311 void CIMClientRep::deregisterClientOpPerformanceDataHandler()
1312 {
|
1313 a.dunfey 1.53 perfDataStore.handler_prt = NULL;
1314 perfDataStore.setClassRegistered(false);
|
1315 w.white 1.37 }
1316
1317
|
1318 kumpf 1.1 PEGASUS_NAMESPACE_END
|