(file) Return to CIMOperationResponseEncoder.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Server

  1 karl  1.65 //%2006////////////////////////////////////////////////////////////////////////
  2 mike  1.2  //
  3 karl  1.51 // 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.39 // IBM Corp.; EMC Corporation, The Open Group.
  7 karl  1.51 // 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.55 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10            // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11 karl  1.65 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 12            // EMC Corporation; Symantec Corporation; The Open Group.
 13 mike  1.2  //
 14            // Permission is hereby granted, free of charge, to any person obtaining a copy
 15 kumpf 1.27 // 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 mike  1.2  // 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            // 
 21 kumpf 1.27 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 22 mike  1.2  // 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 kumpf 1.27 // 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 mike  1.2  // 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: Mike Brasher (mbrasher@bmc.com)
 33            //
 34            // Modified By: Yi Zhou (yi_zhou@hp.com)
 35            //              Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
 36            //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
 37 sage  1.19 //              Arthur Pichlkostner (via Markus: sedgewick_de@yahoo.de)
 38 kumpf 1.29 //              Carol Ann Krug Graves, Hewlett-Packard Company
 39            //                (carolann_graves@hp.com)
 40 kumpf 1.31 //              Sushma Fernandes , Hewlett-Packard Company
 41            //                (sushma_fernandes@hp.com)
 42 david 1.32 //              Dave Rosckes (rosckes@us.ibm.com)
 43 a.arora 1.42 //              Amit K Arora, IBM (amita@in.ibm.com) for PEP#101
 44 brian.campbell 1.46 //              Seema Gupta (gseema@in.ibm.com) for PEP135
 45                     //         Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase1
 46 w.white        1.47 //				Willis White (whiwill@us.ibm.com) PEP 127 and 128
 47 brian.campbell 1.52 //         Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase2
 48 david.dillard  1.54 //              David Dillard, VERITAS Software Corp.
 49                     //                 (david.dillard@veritas.com)
 50 j.alex         1.59 //              John Alex, IBM (johnalex@us.ibm.com) - Bug#2290
 51 mike           1.2  //
 52                     //%/////////////////////////////////////////////////////////////////////////////
 53                     
 54                     #include <Pegasus/Common/Config.h>
 55 kumpf          1.13 #include <Pegasus/Common/Constants.h>
 56 mike           1.2  #include <cctype>
 57                     #include <cstdio>
 58 brian.campbell 1.52 #include <Pegasus/Common/HTTPConnection.h>
 59 mike           1.2  #include <Pegasus/Common/XmlParser.h>
 60                     #include <Pegasus/Common/XmlReader.h>
 61                     #include <Pegasus/Common/XmlWriter.h>
 62                     #include <Pegasus/Common/HTTPMessage.h>
 63                     #include <Pegasus/Common/Logger.h>
 64                     #include <Pegasus/Common/Tracer.h>
 65 sage           1.19 #include <Pegasus/Common/StatisticalData.h>
 66 a.arora        1.42 #include <Pegasus/Common/AutoPtr.h>
 67 mike           1.2  #include "CIMOperationResponseEncoder.h"
 68                     
 69 humberto       1.34 // l10n
 70                     #include <Pegasus/Common/MessageLoader.h>
 71                     
 72 mike           1.2  PEGASUS_USING_STD;
 73                     
 74                     PEGASUS_NAMESPACE_BEGIN
 75                     
 76 kumpf          1.31 const String CIMOperationResponseEncoder::OUT_OF_MEMORY_MESSAGE  =
 77                        "A System error has occured. Please retry the CIM Operation at a later time.";
 78                     
 79 mike           1.2  CIMOperationResponseEncoder::CIMOperationResponseEncoder()
 80 kumpf          1.18    : Base(PEGASUS_QUEUENAME_OPRESPENCODER)
 81 mike           1.2  {
 82                     
 83                     }
 84                     
 85                     CIMOperationResponseEncoder::~CIMOperationResponseEncoder()
 86                     {
 87                     
 88                     }
 89                     
 90 brian.campbell 1.52 void 
 91                     CIMOperationResponseEncoder::sendResponse(CIMResponseMessage* response,
 92                     																					const String &name,
 93                     																					Boolean isImplicit,
 94 mike           1.60 																					Buffer *bodygiven)
 95 brian.campbell 1.52 {
 96                     	static String funcname = "CIMOperationResponseEncoder::sendResponse: ";
 97 mike           1.63  	static String funcnameClassS = String(funcname + "for class " + name);
 98                      	static CString funcnameClass = funcnameClassS.getCString();
 99                      	PEG_METHOD_ENTER(TRC_DISPATCHER, funcnameClass);
100 brian.campbell 1.52 
101                     	if (! response)
102                     	{
103                     		PEG_METHOD_EXIT();
104                     		return;
105                     	}
106                     
107                     	Uint32 queueId = response->queueIds.top();
108                     	response->queueIds.pop();
109                     
110 j.alex         1.59         Boolean closeConnect = response->getCloseConnect();
111                             Tracer::trace(
112                                 TRC_HTTP,
113                                 Tracer::LEVEL3,
114                                 "CIMOperationResponseEncoder::sendResponse()- response->getCloseConnect() returned %d",
115                                 closeConnect);
116                     
117 brian.campbell 1.52 	MessageQueue* queue = MessageQueue::lookup(queueId);
118                     
119                     	if (!queue)
120                     	{
121                     		Tracer::trace(TRC_DISCARDED_DATA, Tracer::LEVEL2, 
122                     									"ERROR: non-existent queueId = %u, response not sent.", queueId);
123                     		PEG_METHOD_EXIT();
124                     		return;
125                     	}
126                     
127                     	HTTPConnection *httpQueue = dynamic_cast<HTTPConnection *>(queue);
128                     
129                     	if (! httpQueue)
130                     	{
131                     		Tracer::trace(TRC_DISCARDED_DATA, Tracer::LEVEL2, 
132                     									"ERROR: Unknown queue type. queueId = %u, response not sent.",
133                     									queueId);
134                     		PEG_METHOD_EXIT();
135                     		return;
136                     	}
137                     
138 brian.campbell 1.52 	Boolean isChunkRequest = httpQueue->isChunkRequested();
139                     	HttpMethod httpMethod = response->getHttpMethod();
140                     	String &messageId = response->messageId;
141                     	CIMException &cimException = response->cimException;
142 mike           1.60 	Buffer message;
143 brian.campbell 1.53 
144                     	// Note: the language is ALWAYS passed empty to the xml formatters because
145                     	// it is HTTPConnection that needs to make the decision of whether to add
146                     	// the languages to the HTTP message.
147 kumpf          1.64 	ContentLanguageList contentLanguage;
148 brian.campbell 1.53 
149 brian.campbell 1.52 	CIMName cimName(name);
150                     	Uint32 messageIndex = response->getIndex();
151                     	Boolean isFirst = messageIndex == 0 ? true : false;
152                     	Boolean isLast = response->isComplete();
153 mike           1.60 	Buffer bodylocal;
154                     	Buffer &body = bodygiven ? *bodygiven : bodylocal;
155 brian.campbell 1.52 
156 w.white        1.56     STAT_SERVEREND         // STAT_SERVEREND sets the toServerTime value in the message class
157 david.dillard  1.62     Uint64 serverTime = response->totServerTime;
158 w.white        1.56 
159                     
160 mike           1.60 	Buffer (*formatResponse)(const CIMName& iMethodName,
161 brian.campbell 1.52 																 const String& messageId,
162                     																 HttpMethod httpMethod,
163 kumpf          1.64 																 const ContentLanguageList &httpContentLanguages, 
164 mike           1.60 																 const Buffer& body,
165 denise.eckstein 1.61 																 Uint64 serverResponseTime,
166 brian.campbell  1.52 																 Boolean isFirst,
167                      																 Boolean isLast);
168                      
169 mike            1.60 	Buffer (*formatError)(const CIMName& methodName,
170 brian.campbell  1.52 															const String& messageId,
171                      															HttpMethod httpMethod,
172                      															const CIMException& cimException);
173                      
174                      	if (isImplicit == false)
175                      	{
176                      		formatResponse = XmlWriter::formatSimpleMethodRspMessage;
177                      		formatError = XmlWriter::formatSimpleMethodErrorRspMessage;
178                      	}
179                      	else
180                      	{
181                      		formatResponse = XmlWriter::formatSimpleIMethodRspMessage;
182                       		formatError = XmlWriter::formatSimpleIMethodErrorRspMessage;
183                      	}
184                      
185                      	if (cimException.getCode() != CIM_ERR_SUCCESS)
186                      	{
187                      		STAT_SERVEREND_ERROR
188                      
189 brian.campbell  1.53 		// only process the FIRST error
190 brian.campbell  1.52 		if (httpQueue->cimException.getCode() == CIM_ERR_SUCCESS)
191                      		{
192 brian.campbell  1.53 			// NOTE: even if this error occurs in the middle, HTTPConnection will
193                      			// flush the entire queued message and reformat.
194 brian.campbell  1.52 			if (isChunkRequest == false)
195                      				message = formatError(name, messageId, httpMethod, cimException);
196                      
197                      			// uri encode the error (for the http header) only when it is 
198                      			// non-chunking or the first error with chunking
199                      			if (isChunkRequest == false || (isChunkRequest == true && isFirst == true))
200 brian.campbell  1.49 			{
201 brian.campbell  1.52 				String msg = TraceableCIMException(cimException).getDescription();
202                      				String uriEncodedMsg = XmlWriter::encodeURICharacters(msg);
203 brian.campbell  1.53 				CIMException cimExceptionUri(cimException.getCode(), uriEncodedMsg);
204                      				cimExceptionUri.setContentLanguages(cimException.getContentLanguages());
205                      				cimException = cimExceptionUri;
206 brian.campbell  1.49 			}
207 mike            1.2  
208 brian.campbell  1.52 		} // if first error in response stream
209 mike            1.2  
210 brian.campbell  1.52 		// never put the error in chunked response (because it will end up in
211 brian.campbell  1.53 		// the trailer), so just use the non-error response formatter to send
212 brian.campbell  1.52 		// more data
213                      
214                      		if (isChunkRequest == true)
215                      		{
216 brian.campbell  1.53 			message = formatResponse(cimName, messageId, httpMethod, contentLanguage,
217                      															 body, serverTime, isFirst, isLast);
218 brian.campbell  1.52 		}
219                      	}
220                      	else
221                      	{
222                      		// else non-error condition
223 w.white         1.56 	  	try
224 brian.campbell  1.52 		{
225 brian.campbell  1.53 			message = formatResponse(cimName, messageId, httpMethod, contentLanguage,
226                      															 body, serverTime, isFirst, isLast);
227 brian.campbell  1.52 		}
228                      
229                      #ifdef PEGASUS_PLATFORM_WIN32_IX86_MSVC
230                         catch (std::bad_alloc&)
231                      #else
232                         catch (bad_alloc&)
233                      #endif
234                      	 {
235                      		 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
236                      								 funcname + OUT_OF_MEMORY_MESSAGE);
237                      
238                      		 cimException = PEGASUS_CIM_EXCEPTION_L
239                      			 (CIM_ERR_FAILED,
240                      				MessageLoaderParms("Server.CIMOperationResponseEncoder.OUT_OF_MEMORY", 
241                      													 OUT_OF_MEMORY_MESSAGE));
242                      		 // try again with new error and no body
243                      		 body.clear();
244                      		 sendResponse(response, name, isImplicit);
245                      		 return;
246                      	 }
247                      	 
248 brian.campbell  1.52 	 STAT_BYTESSENT
249                      
250                      	}
251                      
252                      	AutoPtr<HTTPMessage> httpMessage(new HTTPMessage(message, 0, &cimException));
253                      	httpMessage->setComplete(isLast);
254                      	httpMessage->setIndex(messageIndex);
255 brian.campbell  1.53 
256                      	if (cimException.getCode() != CIM_ERR_SUCCESS)
257                      	{
258                      		httpMessage->contentLanguages = cimException.getContentLanguages();
259                      	}
260                      	else
261                      	{
262                      		const OperationContext::Container &container = 
263                      			response->operationContext.get(ContentLanguageListContainer::NAME);
264                      		const ContentLanguageListContainer &listContainer =
265                      			*dynamic_cast<const ContentLanguageListContainer *>(&container);
266                      		contentLanguage = listContainer.getLanguages();
267                      		httpMessage->contentLanguages = contentLanguage;
268                      	}
269                      
270 j.alex          1.59         Tracer::traceBuffer(
271                                  TRC_XML_IO,
272                                  Tracer::LEVEL2,
273                                  httpMessage->message.getData(),
274                                  httpMessage->message.size());
275 brian.campbell  1.52 	
276 mike            1.63         PEG_LOGGER_TRACE((
277 j.alex          1.59             Logger::STANDARD_LOG,
278                                  System::CIMSERVER,
279                                  Logger::TRACE,
280                                  "CIMOperationResponseEncoder::sendResponse - QueueId: $0  "
281                                  "XML content: $1",queueId,
282 mike            1.63             String(message.getData(), message.size())));
283 brian.campbell  1.52 	
284 j.alex          1.59         httpMessage->setCloseConnect(closeConnect);
285 brian.campbell  1.52 	queue->enqueue(httpMessage.release());
286                      	
287                      	PEG_METHOD_EXIT();	
288 mday            1.9  }
289                      
290 kumpf           1.65.2.1 void CIMOperationResponseEncoder::enqueue(Message *message)
291                          {
292                              handleEnqueue(message);
293                          }
294                          
295 mday            1.9      void CIMOperationResponseEncoder::handleEnqueue(Message *message)
296                          {
297 kumpf           1.14        PEG_METHOD_ENTER(TRC_DISPATCHER,
298                                              "CIMOperationResponseEncoder::handleEnqueue()");
299                          
300 mday            1.9         if (!message)
301                             {
302 kumpf           1.14           PEG_METHOD_EXIT();
303 mday            1.9            return;
304                             }
305 j.alex          1.59     
306                             Tracer::trace(
307                                 TRC_HTTP,
308                                 Tracer::LEVEL3,
309                                 "CIMOperationResponseEncoder::handleEnque()- message->getCloseConnect() returned %d",
310                                 message->getCloseConnect());
311                          
312 mday            1.9         
313                             switch (message->getType())
314                             {
315                                case CIM_GET_CLASS_RESPONSE_MESSAGE:
316                          	 encodeGetClassResponse(
317                          	    (CIMGetClassResponseMessage*)message);
318                          	 break;
319                          
320                                case CIM_GET_INSTANCE_RESPONSE_MESSAGE:
321                          	 encodeGetInstanceResponse(
322                          	    (CIMGetInstanceResponseMessage*)message);
323                          	 break;
324                          
325                                case CIM_DELETE_CLASS_RESPONSE_MESSAGE:
326                          	 encodeDeleteClassResponse(
327                          	    (CIMDeleteClassResponseMessage*)message);
328                          	 break;
329                          
330                                case CIM_DELETE_INSTANCE_RESPONSE_MESSAGE:
331                          	 encodeDeleteInstanceResponse(
332                          	    (CIMDeleteInstanceResponseMessage*)message);
333 mday            1.9      	 break;
334                          
335                                case CIM_CREATE_CLASS_RESPONSE_MESSAGE:
336                          	 encodeCreateClassResponse(
337                          	    (CIMCreateClassResponseMessage*)message);
338                          	 break;
339                          
340                                case CIM_CREATE_INSTANCE_RESPONSE_MESSAGE:
341                          	 encodeCreateInstanceResponse(
342                          	    (CIMCreateInstanceResponseMessage*)message);
343                          	 break;
344                          
345                                case CIM_MODIFY_CLASS_RESPONSE_MESSAGE:
346                          	 encodeModifyClassResponse(
347                          	    (CIMModifyClassResponseMessage*)message);
348                          	 break;
349                          
350                                case CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE:
351                          	 encodeModifyInstanceResponse(
352                          	    (CIMModifyInstanceResponseMessage*)message);
353                          	 break;
354 mday            1.9      
355                                case CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE:
356                          	 encodeEnumerateClassesResponse(
357                          	    (CIMEnumerateClassesResponseMessage*)message);
358                          	 break;
359                          
360                                case CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE:
361                          	 encodeEnumerateClassNamesResponse(
362                          	    (CIMEnumerateClassNamesResponseMessage*)message);
363                          	 break;
364                          
365                                case CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE:
366                          	 encodeEnumerateInstancesResponse(
367                          	    (CIMEnumerateInstancesResponseMessage*)message);
368                          	 break;
369                          
370                                case CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE:
371                          	 encodeEnumerateInstanceNamesResponse(
372                          	    (CIMEnumerateInstanceNamesResponseMessage*)message);
373                          	 break;
374                          
375 mday            1.9            case CIM_EXEC_QUERY_RESPONSE_MESSAGE:
376 kumpf           1.14     	 encodeExecQueryResponse(
377                          	    (CIMExecQueryResponseMessage*)message);
378 mday            1.9      	 break;
379                          
380                                case CIM_ASSOCIATORS_RESPONSE_MESSAGE:
381                          	 encodeAssociatorsResponse(
382                          	    (CIMAssociatorsResponseMessage*)message);
383                          	 break;
384                          
385                                case CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE:
386                          	 encodeAssociatorNamesResponse(
387                          	    (CIMAssociatorNamesResponseMessage*)message);
388                          	 break;
389                          
390                                case CIM_REFERENCES_RESPONSE_MESSAGE:
391                          	 encodeReferencesResponse(
392                          	    (CIMReferencesResponseMessage*)message);
393                          	 break;
394                          
395                                case CIM_REFERENCE_NAMES_RESPONSE_MESSAGE:
396                          	 encodeReferenceNamesResponse(
397                          	    (CIMReferenceNamesResponseMessage*)message);
398                          	 break;
399 mday            1.9      
400                                case CIM_GET_PROPERTY_RESPONSE_MESSAGE:
401                          	 encodeGetPropertyResponse(
402                          	    (CIMGetPropertyResponseMessage*)message);
403                          	 break;
404                          
405                                case CIM_SET_PROPERTY_RESPONSE_MESSAGE:
406                          	 encodeSetPropertyResponse(
407                          	    (CIMSetPropertyResponseMessage*)message);
408                          	 break;
409                          
410                                case CIM_GET_QUALIFIER_RESPONSE_MESSAGE:
411                          	 encodeGetQualifierResponse(
412                          	    (CIMGetQualifierResponseMessage*)message);
413                          	 break;
414                          
415                                case CIM_SET_QUALIFIER_RESPONSE_MESSAGE:
416                          	 encodeSetQualifierResponse(
417                          	    (CIMSetQualifierResponseMessage*)message);
418                          	 break;
419                          
420 mday            1.9            case CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE:
421                          	 encodeDeleteQualifierResponse(
422                          	    (CIMDeleteQualifierResponseMessage*)message);
423                          	 break;
424                          
425                                case CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE:
426                          	 encodeEnumerateQualifiersResponse(
427                          	    (CIMEnumerateQualifiersResponseMessage*)message);
428                          	 break;
429                          
430                                case CIM_INVOKE_METHOD_RESPONSE_MESSAGE:
431                          	 encodeInvokeMethodResponse(
432                          	    (CIMInvokeMethodResponseMessage*)message); 
433                          	 break;
434                             }
435 kumpf           1.4      
436 brian.campbell  1.46     	 delete message;
437 mday            1.8      
438 kumpf           1.14        PEG_METHOD_EXIT();
439 mday            1.9          
440                             return;
441 mday            1.8          
442 mday            1.9      }
443 mday            1.8      
444                          
445 mike            1.2      void CIMOperationResponseEncoder::handleEnqueue()
446                          {
447 kumpf           1.4      
448 mday            1.9         Message* message = dequeue();
449                             if(message)
450                                handleEnqueue(message);
451 mike            1.2      }
452                          
453 chuck           1.33     // l10n - added content language support below
454                          
455 mike            1.2      void CIMOperationResponseEncoder::encodeCreateClassResponse(
456 mday            1.9         CIMCreateClassResponseMessage* response)
457 mike            1.2      {
458 brian.campbell  1.52     	sendResponse(response, "CreateClass", true);
459 mike            1.2      }
460                          
461                          void CIMOperationResponseEncoder::encodeGetClassResponse(
462 mday            1.9         CIMGetClassResponseMessage* response)
463 mike            1.2      {
464 mike            1.60     	Buffer body;
465 brian.campbell  1.52     	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
466                          		XmlWriter::appendClassElement(body, response->cimClass);
467                          	sendResponse(response, "GetClass", true, &body);
468 mike            1.2      }
469                          
470                          void CIMOperationResponseEncoder::encodeModifyClassResponse(
471 mday            1.9         CIMModifyClassResponseMessage* response)
472 mike            1.2      {
473 brian.campbell  1.52     	sendResponse(response, "ModifyClass", true);
474 mike            1.2      }
475                          
476                          void CIMOperationResponseEncoder::encodeEnumerateClassNamesResponse(
477 mday            1.9         CIMEnumerateClassNamesResponseMessage* response)
478 mike            1.2      {
479 mike            1.60     	Buffer body;
480 brian.campbell  1.52     	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
481                          		for (Uint32 i = 0, n = response->classNames.size(); i < n; i++)
482                          			XmlWriter::appendClassNameElement(body, response->classNames[i]);
483                          	sendResponse(response, "EnumerateClassNames", true, &body);
484 mike            1.2      }
485                          
486                          void CIMOperationResponseEncoder::encodeEnumerateClassesResponse(
487 mday            1.9         CIMEnumerateClassesResponseMessage* response)
488 mike            1.2      {
489 mike            1.60     	Buffer body;
490 brian.campbell  1.52     	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
491                          		for (Uint32 i = 0, n= response->cimClasses.size(); i < n; i++)
492                          			XmlWriter::appendClassElement(body, response->cimClasses[i]);
493                          	sendResponse(response, "EnumerateClasses", true, &body);
494 mike            1.2      }
495                          
496                          void CIMOperationResponseEncoder::encodeDeleteClassResponse(
497 mday            1.9         CIMDeleteClassResponseMessage* response)
498 mike            1.2      {
499 brian.campbell  1.52     	sendResponse(response, "DeleteClass", true);
500 mike            1.2      }
501                          
502                          void CIMOperationResponseEncoder::encodeCreateInstanceResponse(
503 mday            1.9         CIMCreateInstanceResponseMessage* response)
504 mike            1.2      {
505 mike            1.60        Buffer body;
506 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
507                          		 XmlWriter::appendInstanceNameElement(body, response->instanceName);
508                          	 sendResponse(response, "CreateInstance", true, &body);
509 mike            1.2      }
510                          
511                          void CIMOperationResponseEncoder::encodeGetInstanceResponse(
512 mday            1.9         CIMGetInstanceResponseMessage* response)
513 mike            1.2      {
514 mike            1.60        Buffer body;
515 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
516                          		 XmlWriter::appendInstanceElement(body, response->cimInstance);
517                          	 sendResponse(response, "GetInstance", true, &body);
518 mike            1.2      }
519                          
520                          void CIMOperationResponseEncoder::encodeModifyInstanceResponse(
521 mday            1.9         CIMModifyInstanceResponseMessage* response)
522 mike            1.2      {
523 brian.campbell  1.52     	sendResponse(response, "ModifyInstance", true);
524 mike            1.2      }
525                          
526                          void CIMOperationResponseEncoder::encodeEnumerateInstancesResponse(
527 mday            1.9         CIMEnumerateInstancesResponseMessage* response)
528 mike            1.2      {
529 mike            1.60     	Buffer body;
530 brian.campbell  1.52     	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
531                          		for (Uint32 i = 0, n = response->cimNamedInstances.size(); i < n; i++)
532                          			XmlWriter::appendValueNamedInstanceElement(body, response->cimNamedInstances[i]);
533                          	sendResponse(response, "EnumerateInstances", true, &body);
534 mike            1.2      }
535                          
536                          void CIMOperationResponseEncoder::encodeEnumerateInstanceNamesResponse(
537 mday            1.9         CIMEnumerateInstanceNamesResponseMessage* response)
538 mike            1.2      {
539 mike            1.60        Buffer body;
540 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
541                          		 for (Uint32 i = 0, n = response->instanceNames.size(); i < n; i++)
542                          			 XmlWriter::appendInstanceNameElement(body, response->instanceNames[i]);
543                          	 sendResponse(response, "EnumerateInstanceNames", true, &body);
544 mike            1.2      }
545                          
546                          void CIMOperationResponseEncoder::encodeDeleteInstanceResponse(
547 mday            1.9         CIMDeleteInstanceResponseMessage* response)
548 mike            1.2      {
549 brian.campbell  1.52     	sendResponse(response, "DeleteInstance", true);
550 mike            1.2      }
551                          
552                          void CIMOperationResponseEncoder::encodeGetPropertyResponse(
553 mday            1.9         CIMGetPropertyResponseMessage* response)
554 mike            1.2      {
555 mike            1.60     	Buffer body;
556 brian.campbell  1.52     	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
557                          		XmlWriter::appendValueElement(body, response->value);
558                          	sendResponse(response, "GetProperty", true, &body);
559 mike            1.2      }
560                          
561                          void CIMOperationResponseEncoder::encodeSetPropertyResponse(
562 mday            1.9         CIMSetPropertyResponseMessage* response)
563 mike            1.2      {
564 brian.campbell  1.52     	sendResponse(response, "SetProperty", true);
565 mike            1.2      }
566                          
567                          void CIMOperationResponseEncoder::encodeSetQualifierResponse(
568 mday            1.9         CIMSetQualifierResponseMessage* response)
569 mike            1.2      {
570 brian.campbell  1.52     	sendResponse(response, "SetQualifier", true);
571 mike            1.2      }
572                          
573                          void CIMOperationResponseEncoder::encodeGetQualifierResponse(
574 mday            1.9         CIMGetQualifierResponseMessage* response)
575 mike            1.2      {
576 mike            1.60     	Buffer body;
577 brian.campbell  1.52     	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
578                          		XmlWriter::appendQualifierDeclElement(body, response->cimQualifierDecl);
579                          	sendResponse(response, "GetQualifier", true, &body);
580 mike            1.2      }
581                          
582                          void CIMOperationResponseEncoder::encodeEnumerateQualifiersResponse(
583 mday            1.9         CIMEnumerateQualifiersResponseMessage* response)
584 mike            1.2      {
585 mike            1.60        Buffer body;
586 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
587                          		 for (Uint32 i = 0, n = response->qualifierDeclarations.size(); i < n;i++)
588                          			 XmlWriter::appendQualifierDeclElement(body, response->qualifierDeclarations[i]);
589                          	 sendResponse(response, "EnumerateQualifiers", true, &body);
590 mike            1.2      }
591                          
592                          void CIMOperationResponseEncoder::encodeDeleteQualifierResponse(
593 mday            1.9         CIMDeleteQualifierResponseMessage* response)
594 mike            1.2      {
595 brian.campbell  1.52     	sendResponse(response, "DeleteQualifier", true);
596 mike            1.2      }
597                          
598                          void CIMOperationResponseEncoder::encodeReferenceNamesResponse(
599 mday            1.9         CIMReferenceNamesResponseMessage* response)
600 mike            1.2      {
601 mike            1.60        Buffer body;
602 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
603                          		 for (Uint32 i = 0, n = response->objectNames.size(); i < n; i++)
604                          		 {
605                          			 body << "<OBJECTPATH>\n";
606                          			 XmlWriter::appendValueReferenceElement(body, response->objectNames[i],
607                          																							false);
608                          			 body << "</OBJECTPATH>\n";
609                          		 }
610                          	 sendResponse(response, "ReferenceNames", true, &body);
611 mike            1.2      }
612                          
613                          void CIMOperationResponseEncoder::encodeReferencesResponse(
614 mday            1.9         CIMReferencesResponseMessage* response)
615 mike            1.2      {
616 mike            1.60        Buffer body;
617 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
618                          		 for (Uint32 i = 0, n = response->cimObjects.size(); i < n;i++)
619                          			 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
620                          	 sendResponse(response, "References", true, &body);
621 mike            1.2      }
622                          
623                          void CIMOperationResponseEncoder::encodeAssociatorNamesResponse(
624 mday            1.9         CIMAssociatorNamesResponseMessage* response)
625 mike            1.2      {
626 mike            1.60        Buffer body;
627 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
628                          		 for (Uint32 i = 0, n = response->objectNames.size(); i < n; i++)
629                          		 {
630                          			 body << "<OBJECTPATH>\n";
631                          			 XmlWriter::appendValueReferenceElement(body, response->objectNames[i], false);
632                          			 body << "</OBJECTPATH>\n";
633                          		 }
634                          	 sendResponse(response, "AssociatorNames", true, &body);
635 mike            1.2      }
636                          
637                          void CIMOperationResponseEncoder::encodeAssociatorsResponse(
638 mday            1.9         CIMAssociatorsResponseMessage* response)
639 mike            1.2      {
640 mike            1.60        Buffer body;
641 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
642                          		 for (Uint32 i = 0, n = response->cimObjects.size(); i < n; i++)
643                          			 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
644                          	 sendResponse(response, "Associators", true, &body);
645 kumpf           1.14     }
646                          
647                          void CIMOperationResponseEncoder::encodeExecQueryResponse(
648                             CIMExecQueryResponseMessage* response)
649                          {
650 mike            1.60        Buffer body;
651 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
652                          		 for (Uint32 i = 0; i < response->cimObjects.size(); i++)
653                          			 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
654                          	 sendResponse(response, "ExecQuery", true, &body);
655 mike            1.2      }
656                          
657                          void CIMOperationResponseEncoder::encodeInvokeMethodResponse(
658 mday            1.26         CIMInvokeMethodResponseMessage* response)
659 mike            1.2      {
660 mike            1.60        Buffer body;
661 mday            1.9      
662                             // ATTN-RK-P3-20020219: Who's job is it to make sure the return value is
663                             // not an array?
664 kumpf           1.17        // Only add the return value if it is not null
665 w.white         1.47     
666 brian.campbell  1.52     	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
667                          	 {
668                          		 if (!response->retValue.isNull())
669                          			 XmlWriter::appendReturnValueElement(body, response->retValue);
670                          		 
671                          		 for (Uint32 i=0, n = response->outParameters.size(); i < n; i++)
672                          			 XmlWriter::appendParamValueElement(body, response->outParameters[i]);
673                          	 }
674                          	 sendResponse(response, response->methodName.getString(), false, &body);
675 mike            1.2      }
676                          
677                          PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2