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