(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 kumpf          1.66     // STAT_SERVEREND sets the getTotalServerTime() value in the message class
157                         STAT_SERVEREND
158                     
159 denise.eckstein 1.68 #ifndef PEGASUS_DISABLE_PERFINST
160 kumpf           1.66     Uint64 serverTime = response->getTotalServerTime();
161 denise.eckstein 1.68 #else
162                          Uint64 serverTime = 0;
163                      #endif
164 w.white         1.56 
165 mike            1.60 	Buffer (*formatResponse)(const CIMName& iMethodName,
166 brian.campbell  1.52 																 const String& messageId,
167                      																 HttpMethod httpMethod,
168 kumpf           1.64 																 const ContentLanguageList &httpContentLanguages, 
169 mike            1.60 																 const Buffer& body,
170 denise.eckstein 1.61 																 Uint64 serverResponseTime,
171 brian.campbell  1.52 																 Boolean isFirst,
172                      																 Boolean isLast);
173                      
174 mike            1.60 	Buffer (*formatError)(const CIMName& methodName,
175 brian.campbell  1.52 															const String& messageId,
176                      															HttpMethod httpMethod,
177                      															const CIMException& cimException);
178                      
179                      	if (isImplicit == false)
180                      	{
181                      		formatResponse = XmlWriter::formatSimpleMethodRspMessage;
182                      		formatError = XmlWriter::formatSimpleMethodErrorRspMessage;
183                      	}
184                      	else
185                      	{
186                      		formatResponse = XmlWriter::formatSimpleIMethodRspMessage;
187                       		formatError = XmlWriter::formatSimpleIMethodErrorRspMessage;
188                      	}
189                      
190                      	if (cimException.getCode() != CIM_ERR_SUCCESS)
191                      	{
192                      		STAT_SERVEREND_ERROR
193                      
194 brian.campbell  1.53 		// only process the FIRST error
195 brian.campbell  1.52 		if (httpQueue->cimException.getCode() == CIM_ERR_SUCCESS)
196                      		{
197 brian.campbell  1.53 			// NOTE: even if this error occurs in the middle, HTTPConnection will
198                      			// flush the entire queued message and reformat.
199 brian.campbell  1.52 			if (isChunkRequest == false)
200                      				message = formatError(name, messageId, httpMethod, cimException);
201                      
202                      			// uri encode the error (for the http header) only when it is 
203                      			// non-chunking or the first error with chunking
204                      			if (isChunkRequest == false || (isChunkRequest == true && isFirst == true))
205 brian.campbell  1.49 			{
206 brian.campbell  1.52 				String msg = TraceableCIMException(cimException).getDescription();
207                      				String uriEncodedMsg = XmlWriter::encodeURICharacters(msg);
208 brian.campbell  1.53 				CIMException cimExceptionUri(cimException.getCode(), uriEncodedMsg);
209                      				cimExceptionUri.setContentLanguages(cimException.getContentLanguages());
210                      				cimException = cimExceptionUri;
211 brian.campbell  1.49 			}
212 mike            1.2  
213 brian.campbell  1.52 		} // if first error in response stream
214 mike            1.2  
215 brian.campbell  1.52 		// never put the error in chunked response (because it will end up in
216 brian.campbell  1.53 		// the trailer), so just use the non-error response formatter to send
217 brian.campbell  1.52 		// more data
218                      
219                      		if (isChunkRequest == true)
220                      		{
221 brian.campbell  1.53 			message = formatResponse(cimName, messageId, httpMethod, contentLanguage,
222                      															 body, serverTime, isFirst, isLast);
223 brian.campbell  1.52 		}
224                      	}
225                      	else
226                      	{
227                      		// else non-error condition
228 w.white         1.56 	  	try
229 brian.campbell  1.52 		{
230 brian.campbell  1.53 			message = formatResponse(cimName, messageId, httpMethod, contentLanguage,
231                      															 body, serverTime, isFirst, isLast);
232 brian.campbell  1.52 		}
233                      
234                      #ifdef PEGASUS_PLATFORM_WIN32_IX86_MSVC
235                         catch (std::bad_alloc&)
236                      #else
237                         catch (bad_alloc&)
238                      #endif
239                      	 {
240                      		 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
241                      								 funcname + OUT_OF_MEMORY_MESSAGE);
242                      
243                      		 cimException = PEGASUS_CIM_EXCEPTION_L
244                      			 (CIM_ERR_FAILED,
245                      				MessageLoaderParms("Server.CIMOperationResponseEncoder.OUT_OF_MEMORY", 
246                      													 OUT_OF_MEMORY_MESSAGE));
247                      		 // try again with new error and no body
248                      		 body.clear();
249                      		 sendResponse(response, name, isImplicit);
250                      		 return;
251                      	 }
252                      	 
253 brian.campbell  1.52 	 STAT_BYTESSENT
254                      
255                      	}
256                      
257                      	AutoPtr<HTTPMessage> httpMessage(new HTTPMessage(message, 0, &cimException));
258                      	httpMessage->setComplete(isLast);
259                      	httpMessage->setIndex(messageIndex);
260 brian.campbell  1.53 
261                      	if (cimException.getCode() != CIM_ERR_SUCCESS)
262                      	{
263                      		httpMessage->contentLanguages = cimException.getContentLanguages();
264                      	}
265                      	else
266                      	{
267                      		const OperationContext::Container &container = 
268                      			response->operationContext.get(ContentLanguageListContainer::NAME);
269                      		const ContentLanguageListContainer &listContainer =
270                      			*dynamic_cast<const ContentLanguageListContainer *>(&container);
271                      		contentLanguage = listContainer.getLanguages();
272                      		httpMessage->contentLanguages = contentLanguage;
273                      	}
274                      
275 j.alex          1.59         Tracer::traceBuffer(
276                                  TRC_XML_IO,
277                                  Tracer::LEVEL2,
278                                  httpMessage->message.getData(),
279                                  httpMessage->message.size());
280 brian.campbell  1.52 	
281 mike            1.63         PEG_LOGGER_TRACE((
282 j.alex          1.59             Logger::STANDARD_LOG,
283                                  System::CIMSERVER,
284                                  Logger::TRACE,
285                                  "CIMOperationResponseEncoder::sendResponse - QueueId: $0  "
286                                  "XML content: $1",queueId,
287 mike            1.63             String(message.getData(), message.size())));
288 brian.campbell  1.52 	
289 j.alex          1.59         httpMessage->setCloseConnect(closeConnect);
290 brian.campbell  1.52 	queue->enqueue(httpMessage.release());
291                      	
292                      	PEG_METHOD_EXIT();	
293 mday            1.9  }
294                      
295 kumpf           1.67 void CIMOperationResponseEncoder::enqueue(Message *message)
296                      {
297                          handleEnqueue(message);
298                      }
299                      
300 mday            1.9  void CIMOperationResponseEncoder::handleEnqueue(Message *message)
301                      {
302 kumpf           1.14    PEG_METHOD_ENTER(TRC_DISPATCHER,
303                                          "CIMOperationResponseEncoder::handleEnqueue()");
304                      
305 mday            1.9     if (!message)
306                         {
307 kumpf           1.14       PEG_METHOD_EXIT();
308 mday            1.9        return;
309                         }
310 j.alex          1.59 
311                         Tracer::trace(
312                             TRC_HTTP,
313                             Tracer::LEVEL3,
314                             "CIMOperationResponseEncoder::handleEnque()- message->getCloseConnect() returned %d",
315                             message->getCloseConnect());
316                      
317 mday            1.9     
318                         switch (message->getType())
319                         {
320                            case CIM_GET_CLASS_RESPONSE_MESSAGE:
321                      	 encodeGetClassResponse(
322                      	    (CIMGetClassResponseMessage*)message);
323                      	 break;
324                      
325                            case CIM_GET_INSTANCE_RESPONSE_MESSAGE:
326                      	 encodeGetInstanceResponse(
327                      	    (CIMGetInstanceResponseMessage*)message);
328                      	 break;
329                      
330                            case CIM_DELETE_CLASS_RESPONSE_MESSAGE:
331                      	 encodeDeleteClassResponse(
332                      	    (CIMDeleteClassResponseMessage*)message);
333                      	 break;
334                      
335                            case CIM_DELETE_INSTANCE_RESPONSE_MESSAGE:
336                      	 encodeDeleteInstanceResponse(
337                      	    (CIMDeleteInstanceResponseMessage*)message);
338 mday            1.9  	 break;
339                      
340                            case CIM_CREATE_CLASS_RESPONSE_MESSAGE:
341                      	 encodeCreateClassResponse(
342                      	    (CIMCreateClassResponseMessage*)message);
343                      	 break;
344                      
345                            case CIM_CREATE_INSTANCE_RESPONSE_MESSAGE:
346                      	 encodeCreateInstanceResponse(
347                      	    (CIMCreateInstanceResponseMessage*)message);
348                      	 break;
349                      
350                            case CIM_MODIFY_CLASS_RESPONSE_MESSAGE:
351                      	 encodeModifyClassResponse(
352                      	    (CIMModifyClassResponseMessage*)message);
353                      	 break;
354                      
355                            case CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE:
356                      	 encodeModifyInstanceResponse(
357                      	    (CIMModifyInstanceResponseMessage*)message);
358                      	 break;
359 mday            1.9  
360                            case CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE:
361                      	 encodeEnumerateClassesResponse(
362                      	    (CIMEnumerateClassesResponseMessage*)message);
363                      	 break;
364                      
365                            case CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE:
366                      	 encodeEnumerateClassNamesResponse(
367                      	    (CIMEnumerateClassNamesResponseMessage*)message);
368                      	 break;
369                      
370                            case CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE:
371                      	 encodeEnumerateInstancesResponse(
372                      	    (CIMEnumerateInstancesResponseMessage*)message);
373                      	 break;
374                      
375                            case CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE:
376                      	 encodeEnumerateInstanceNamesResponse(
377                      	    (CIMEnumerateInstanceNamesResponseMessage*)message);
378                      	 break;
379                      
380 mday            1.9        case CIM_EXEC_QUERY_RESPONSE_MESSAGE:
381 kumpf           1.14 	 encodeExecQueryResponse(
382                      	    (CIMExecQueryResponseMessage*)message);
383 mday            1.9  	 break;
384                      
385                            case CIM_ASSOCIATORS_RESPONSE_MESSAGE:
386                      	 encodeAssociatorsResponse(
387                      	    (CIMAssociatorsResponseMessage*)message);
388                      	 break;
389                      
390                            case CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE:
391                      	 encodeAssociatorNamesResponse(
392                      	    (CIMAssociatorNamesResponseMessage*)message);
393                      	 break;
394                      
395                            case CIM_REFERENCES_RESPONSE_MESSAGE:
396                      	 encodeReferencesResponse(
397                      	    (CIMReferencesResponseMessage*)message);
398                      	 break;
399                      
400                            case CIM_REFERENCE_NAMES_RESPONSE_MESSAGE:
401                      	 encodeReferenceNamesResponse(
402                      	    (CIMReferenceNamesResponseMessage*)message);
403                      	 break;
404 mday            1.9  
405                            case CIM_GET_PROPERTY_RESPONSE_MESSAGE:
406                      	 encodeGetPropertyResponse(
407                      	    (CIMGetPropertyResponseMessage*)message);
408                      	 break;
409                      
410                            case CIM_SET_PROPERTY_RESPONSE_MESSAGE:
411                      	 encodeSetPropertyResponse(
412                      	    (CIMSetPropertyResponseMessage*)message);
413                      	 break;
414                      
415                            case CIM_GET_QUALIFIER_RESPONSE_MESSAGE:
416                      	 encodeGetQualifierResponse(
417                      	    (CIMGetQualifierResponseMessage*)message);
418                      	 break;
419                      
420                            case CIM_SET_QUALIFIER_RESPONSE_MESSAGE:
421                      	 encodeSetQualifierResponse(
422                      	    (CIMSetQualifierResponseMessage*)message);
423                      	 break;
424                      
425 mday            1.9        case CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE:
426                      	 encodeDeleteQualifierResponse(
427                      	    (CIMDeleteQualifierResponseMessage*)message);
428                      	 break;
429                      
430                            case CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE:
431                      	 encodeEnumerateQualifiersResponse(
432                      	    (CIMEnumerateQualifiersResponseMessage*)message);
433                      	 break;
434                      
435                            case CIM_INVOKE_METHOD_RESPONSE_MESSAGE:
436                      	 encodeInvokeMethodResponse(
437                      	    (CIMInvokeMethodResponseMessage*)message); 
438                      	 break;
439                         }
440 kumpf           1.4  
441 brian.campbell  1.46 	 delete message;
442 mday            1.8  
443 kumpf           1.14    PEG_METHOD_EXIT();
444 mday            1.9      
445                         return;
446 mday            1.8      
447 mday            1.9  }
448 mday            1.8  
449                      
450 mike            1.2  void CIMOperationResponseEncoder::handleEnqueue()
451                      {
452 kumpf           1.4  
453 mday            1.9     Message* message = dequeue();
454                         if(message)
455                            handleEnqueue(message);
456 mike            1.2  }
457                      
458 chuck           1.33 // l10n - added content language support below
459                      
460 mike            1.2  void CIMOperationResponseEncoder::encodeCreateClassResponse(
461 mday            1.9     CIMCreateClassResponseMessage* response)
462 mike            1.2  {
463 brian.campbell  1.52 	sendResponse(response, "CreateClass", true);
464 mike            1.2  }
465                      
466                      void CIMOperationResponseEncoder::encodeGetClassResponse(
467 mday            1.9     CIMGetClassResponseMessage* response)
468 mike            1.2  {
469 mike            1.60 	Buffer body;
470 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
471                      		XmlWriter::appendClassElement(body, response->cimClass);
472                      	sendResponse(response, "GetClass", true, &body);
473 mike            1.2  }
474                      
475                      void CIMOperationResponseEncoder::encodeModifyClassResponse(
476 mday            1.9     CIMModifyClassResponseMessage* response)
477 mike            1.2  {
478 brian.campbell  1.52 	sendResponse(response, "ModifyClass", true);
479 mike            1.2  }
480                      
481                      void CIMOperationResponseEncoder::encodeEnumerateClassNamesResponse(
482 mday            1.9     CIMEnumerateClassNamesResponseMessage* response)
483 mike            1.2  {
484 mike            1.60 	Buffer body;
485 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
486                      		for (Uint32 i = 0, n = response->classNames.size(); i < n; i++)
487                      			XmlWriter::appendClassNameElement(body, response->classNames[i]);
488                      	sendResponse(response, "EnumerateClassNames", true, &body);
489 mike            1.2  }
490                      
491                      void CIMOperationResponseEncoder::encodeEnumerateClassesResponse(
492 mday            1.9     CIMEnumerateClassesResponseMessage* response)
493 mike            1.2  {
494 mike            1.60 	Buffer body;
495 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
496                      		for (Uint32 i = 0, n= response->cimClasses.size(); i < n; i++)
497                      			XmlWriter::appendClassElement(body, response->cimClasses[i]);
498                      	sendResponse(response, "EnumerateClasses", true, &body);
499 mike            1.2  }
500                      
501                      void CIMOperationResponseEncoder::encodeDeleteClassResponse(
502 mday            1.9     CIMDeleteClassResponseMessage* response)
503 mike            1.2  {
504 brian.campbell  1.52 	sendResponse(response, "DeleteClass", true);
505 mike            1.2  }
506                      
507                      void CIMOperationResponseEncoder::encodeCreateInstanceResponse(
508 mday            1.9     CIMCreateInstanceResponseMessage* response)
509 mike            1.2  {
510 mike            1.60    Buffer body;
511 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
512                      		 XmlWriter::appendInstanceNameElement(body, response->instanceName);
513                      	 sendResponse(response, "CreateInstance", true, &body);
514 mike            1.2  }
515                      
516                      void CIMOperationResponseEncoder::encodeGetInstanceResponse(
517 mday            1.9     CIMGetInstanceResponseMessage* response)
518 mike            1.2  {
519 mike            1.60    Buffer body;
520 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
521                      		 XmlWriter::appendInstanceElement(body, response->cimInstance);
522                      	 sendResponse(response, "GetInstance", true, &body);
523 mike            1.2  }
524                      
525                      void CIMOperationResponseEncoder::encodeModifyInstanceResponse(
526 mday            1.9     CIMModifyInstanceResponseMessage* response)
527 mike            1.2  {
528 brian.campbell  1.52 	sendResponse(response, "ModifyInstance", true);
529 mike            1.2  }
530                      
531                      void CIMOperationResponseEncoder::encodeEnumerateInstancesResponse(
532 mday            1.9     CIMEnumerateInstancesResponseMessage* response)
533 mike            1.2  {
534 mike            1.60 	Buffer body;
535 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
536                      		for (Uint32 i = 0, n = response->cimNamedInstances.size(); i < n; i++)
537                      			XmlWriter::appendValueNamedInstanceElement(body, response->cimNamedInstances[i]);
538                      	sendResponse(response, "EnumerateInstances", true, &body);
539 mike            1.2  }
540                      
541                      void CIMOperationResponseEncoder::encodeEnumerateInstanceNamesResponse(
542 mday            1.9     CIMEnumerateInstanceNamesResponseMessage* response)
543 mike            1.2  {
544 mike            1.60    Buffer body;
545 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
546                      		 for (Uint32 i = 0, n = response->instanceNames.size(); i < n; i++)
547                      			 XmlWriter::appendInstanceNameElement(body, response->instanceNames[i]);
548                      	 sendResponse(response, "EnumerateInstanceNames", true, &body);
549 mike            1.2  }
550                      
551                      void CIMOperationResponseEncoder::encodeDeleteInstanceResponse(
552 mday            1.9     CIMDeleteInstanceResponseMessage* response)
553 mike            1.2  {
554 brian.campbell  1.52 	sendResponse(response, "DeleteInstance", true);
555 mike            1.2  }
556                      
557                      void CIMOperationResponseEncoder::encodeGetPropertyResponse(
558 mday            1.9     CIMGetPropertyResponseMessage* response)
559 mike            1.2  {
560 mike            1.60 	Buffer body;
561 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
562                      		XmlWriter::appendValueElement(body, response->value);
563                      	sendResponse(response, "GetProperty", true, &body);
564 mike            1.2  }
565                      
566                      void CIMOperationResponseEncoder::encodeSetPropertyResponse(
567 mday            1.9     CIMSetPropertyResponseMessage* response)
568 mike            1.2  {
569 brian.campbell  1.52 	sendResponse(response, "SetProperty", true);
570 mike            1.2  }
571                      
572                      void CIMOperationResponseEncoder::encodeSetQualifierResponse(
573 mday            1.9     CIMSetQualifierResponseMessage* response)
574 mike            1.2  {
575 brian.campbell  1.52 	sendResponse(response, "SetQualifier", true);
576 mike            1.2  }
577                      
578                      void CIMOperationResponseEncoder::encodeGetQualifierResponse(
579 mday            1.9     CIMGetQualifierResponseMessage* response)
580 mike            1.2  {
581 mike            1.60 	Buffer body;
582 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
583                      		XmlWriter::appendQualifierDeclElement(body, response->cimQualifierDecl);
584                      	sendResponse(response, "GetQualifier", true, &body);
585 mike            1.2  }
586                      
587                      void CIMOperationResponseEncoder::encodeEnumerateQualifiersResponse(
588 mday            1.9     CIMEnumerateQualifiersResponseMessage* response)
589 mike            1.2  {
590 mike            1.60    Buffer body;
591 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
592                      		 for (Uint32 i = 0, n = response->qualifierDeclarations.size(); i < n;i++)
593                      			 XmlWriter::appendQualifierDeclElement(body, response->qualifierDeclarations[i]);
594                      	 sendResponse(response, "EnumerateQualifiers", true, &body);
595 mike            1.2  }
596                      
597                      void CIMOperationResponseEncoder::encodeDeleteQualifierResponse(
598 mday            1.9     CIMDeleteQualifierResponseMessage* response)
599 mike            1.2  {
600 brian.campbell  1.52 	sendResponse(response, "DeleteQualifier", true);
601 mike            1.2  }
602                      
603                      void CIMOperationResponseEncoder::encodeReferenceNamesResponse(
604 mday            1.9     CIMReferenceNamesResponseMessage* response)
605 mike            1.2  {
606 mike            1.60    Buffer body;
607 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
608                      		 for (Uint32 i = 0, n = response->objectNames.size(); i < n; i++)
609                      		 {
610                      			 body << "<OBJECTPATH>\n";
611                      			 XmlWriter::appendValueReferenceElement(body, response->objectNames[i],
612                      																							false);
613                      			 body << "</OBJECTPATH>\n";
614                      		 }
615                      	 sendResponse(response, "ReferenceNames", true, &body);
616 mike            1.2  }
617                      
618                      void CIMOperationResponseEncoder::encodeReferencesResponse(
619 mday            1.9     CIMReferencesResponseMessage* response)
620 mike            1.2  {
621 mike            1.60    Buffer body;
622 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
623                      		 for (Uint32 i = 0, n = response->cimObjects.size(); i < n;i++)
624                      			 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
625                      	 sendResponse(response, "References", true, &body);
626 mike            1.2  }
627                      
628                      void CIMOperationResponseEncoder::encodeAssociatorNamesResponse(
629 mday            1.9     CIMAssociatorNamesResponseMessage* response)
630 mike            1.2  {
631 mike            1.60    Buffer body;
632 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
633                      		 for (Uint32 i = 0, n = response->objectNames.size(); i < n; i++)
634                      		 {
635                      			 body << "<OBJECTPATH>\n";
636                      			 XmlWriter::appendValueReferenceElement(body, response->objectNames[i], false);
637                      			 body << "</OBJECTPATH>\n";
638                      		 }
639                      	 sendResponse(response, "AssociatorNames", true, &body);
640 mike            1.2  }
641                      
642                      void CIMOperationResponseEncoder::encodeAssociatorsResponse(
643 mday            1.9     CIMAssociatorsResponseMessage* response)
644 mike            1.2  {
645 mike            1.60    Buffer body;
646 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
647                      		 for (Uint32 i = 0, n = response->cimObjects.size(); i < n; i++)
648                      			 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
649                      	 sendResponse(response, "Associators", true, &body);
650 kumpf           1.14 }
651                      
652                      void CIMOperationResponseEncoder::encodeExecQueryResponse(
653                         CIMExecQueryResponseMessage* response)
654                      {
655 mike            1.60    Buffer body;
656 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
657                      		 for (Uint32 i = 0; i < response->cimObjects.size(); i++)
658                      			 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
659                      	 sendResponse(response, "ExecQuery", true, &body);
660 mike            1.2  }
661                      
662                      void CIMOperationResponseEncoder::encodeInvokeMethodResponse(
663 mday            1.26     CIMInvokeMethodResponseMessage* response)
664 mike            1.2  {
665 mike            1.60    Buffer body;
666 mday            1.9  
667                         // ATTN-RK-P3-20020219: Who's job is it to make sure the return value is
668                         // not an array?
669 kumpf           1.17    // Only add the return value if it is not null
670 w.white         1.47 
671 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
672                      	 {
673                      		 if (!response->retValue.isNull())
674                      			 XmlWriter::appendReturnValueElement(body, response->retValue);
675                      		 
676                      		 for (Uint32 i=0, n = response->outParameters.size(); i < n; i++)
677                      			 XmlWriter::appendParamValueElement(body, response->outParameters[i]);
678                      	 }
679                      	 sendResponse(response, response->methodName.getString(), false, &body);
680 mike            1.2  }
681                      
682                      PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2