(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                      void CIMOperationResponseEncoder::handleEnqueue(Message *message)
291                      {
292 kumpf           1.14    PEG_METHOD_ENTER(TRC_DISPATCHER,
293                                          "CIMOperationResponseEncoder::handleEnqueue()");
294                      
295 mday            1.9     if (!message)
296                         {
297 kumpf           1.14       PEG_METHOD_EXIT();
298 mday            1.9        return;
299                         }
300 j.alex          1.59 
301                         Tracer::trace(
302                             TRC_HTTP,
303                             Tracer::LEVEL3,
304                             "CIMOperationResponseEncoder::handleEnque()- message->getCloseConnect() returned %d",
305                             message->getCloseConnect());
306                      
307 mday            1.9     
308                         switch (message->getType())
309                         {
310                            case CIM_GET_CLASS_RESPONSE_MESSAGE:
311                      	 encodeGetClassResponse(
312                      	    (CIMGetClassResponseMessage*)message);
313                      	 break;
314                      
315                            case CIM_GET_INSTANCE_RESPONSE_MESSAGE:
316                      	 encodeGetInstanceResponse(
317                      	    (CIMGetInstanceResponseMessage*)message);
318                      	 break;
319                      
320                            case CIM_DELETE_CLASS_RESPONSE_MESSAGE:
321                      	 encodeDeleteClassResponse(
322                      	    (CIMDeleteClassResponseMessage*)message);
323                      	 break;
324                      
325                            case CIM_DELETE_INSTANCE_RESPONSE_MESSAGE:
326                      	 encodeDeleteInstanceResponse(
327                      	    (CIMDeleteInstanceResponseMessage*)message);
328 mday            1.9  	 break;
329                      
330                            case CIM_CREATE_CLASS_RESPONSE_MESSAGE:
331                      	 encodeCreateClassResponse(
332                      	    (CIMCreateClassResponseMessage*)message);
333                      	 break;
334                      
335                            case CIM_CREATE_INSTANCE_RESPONSE_MESSAGE:
336                      	 encodeCreateInstanceResponse(
337                      	    (CIMCreateInstanceResponseMessage*)message);
338                      	 break;
339                      
340                            case CIM_MODIFY_CLASS_RESPONSE_MESSAGE:
341                      	 encodeModifyClassResponse(
342                      	    (CIMModifyClassResponseMessage*)message);
343                      	 break;
344                      
345                            case CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE:
346                      	 encodeModifyInstanceResponse(
347                      	    (CIMModifyInstanceResponseMessage*)message);
348                      	 break;
349 mday            1.9  
350                            case CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE:
351                      	 encodeEnumerateClassesResponse(
352                      	    (CIMEnumerateClassesResponseMessage*)message);
353                      	 break;
354                      
355                            case CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE:
356                      	 encodeEnumerateClassNamesResponse(
357                      	    (CIMEnumerateClassNamesResponseMessage*)message);
358                      	 break;
359                      
360                            case CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE:
361                      	 encodeEnumerateInstancesResponse(
362                      	    (CIMEnumerateInstancesResponseMessage*)message);
363                      	 break;
364                      
365                            case CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE:
366                      	 encodeEnumerateInstanceNamesResponse(
367                      	    (CIMEnumerateInstanceNamesResponseMessage*)message);
368                      	 break;
369                      
370 mday            1.9        case CIM_EXEC_QUERY_RESPONSE_MESSAGE:
371 kumpf           1.14 	 encodeExecQueryResponse(
372                      	    (CIMExecQueryResponseMessage*)message);
373 mday            1.9  	 break;
374                      
375                            case CIM_ASSOCIATORS_RESPONSE_MESSAGE:
376                      	 encodeAssociatorsResponse(
377                      	    (CIMAssociatorsResponseMessage*)message);
378                      	 break;
379                      
380                            case CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE:
381                      	 encodeAssociatorNamesResponse(
382                      	    (CIMAssociatorNamesResponseMessage*)message);
383                      	 break;
384                      
385                            case CIM_REFERENCES_RESPONSE_MESSAGE:
386                      	 encodeReferencesResponse(
387                      	    (CIMReferencesResponseMessage*)message);
388                      	 break;
389                      
390                            case CIM_REFERENCE_NAMES_RESPONSE_MESSAGE:
391                      	 encodeReferenceNamesResponse(
392                      	    (CIMReferenceNamesResponseMessage*)message);
393                      	 break;
394 mday            1.9  
395                            case CIM_GET_PROPERTY_RESPONSE_MESSAGE:
396                      	 encodeGetPropertyResponse(
397                      	    (CIMGetPropertyResponseMessage*)message);
398                      	 break;
399                      
400                            case CIM_SET_PROPERTY_RESPONSE_MESSAGE:
401                      	 encodeSetPropertyResponse(
402                      	    (CIMSetPropertyResponseMessage*)message);
403                      	 break;
404                      
405                            case CIM_GET_QUALIFIER_RESPONSE_MESSAGE:
406                      	 encodeGetQualifierResponse(
407                      	    (CIMGetQualifierResponseMessage*)message);
408                      	 break;
409                      
410                            case CIM_SET_QUALIFIER_RESPONSE_MESSAGE:
411                      	 encodeSetQualifierResponse(
412                      	    (CIMSetQualifierResponseMessage*)message);
413                      	 break;
414                      
415 mday            1.9        case CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE:
416                      	 encodeDeleteQualifierResponse(
417                      	    (CIMDeleteQualifierResponseMessage*)message);
418                      	 break;
419                      
420                            case CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE:
421                      	 encodeEnumerateQualifiersResponse(
422                      	    (CIMEnumerateQualifiersResponseMessage*)message);
423                      	 break;
424                      
425                            case CIM_INVOKE_METHOD_RESPONSE_MESSAGE:
426                      	 encodeInvokeMethodResponse(
427                      	    (CIMInvokeMethodResponseMessage*)message); 
428                      	 break;
429                         }
430 kumpf           1.4  
431 brian.campbell  1.46 	 delete message;
432 mday            1.8  
433 kumpf           1.14    PEG_METHOD_EXIT();
434 mday            1.9      
435                         return;
436 mday            1.8      
437 mday            1.9  }
438 mday            1.8  
439                      
440 mike            1.2  void CIMOperationResponseEncoder::handleEnqueue()
441                      {
442 kumpf           1.4  
443 mday            1.9     Message* message = dequeue();
444                         if(message)
445                            handleEnqueue(message);
446 mike            1.2  }
447                      
448 chuck           1.33 // l10n - added content language support below
449                      
450 mike            1.2  void CIMOperationResponseEncoder::encodeCreateClassResponse(
451 mday            1.9     CIMCreateClassResponseMessage* response)
452 mike            1.2  {
453 brian.campbell  1.52 	sendResponse(response, "CreateClass", true);
454 mike            1.2  }
455                      
456                      void CIMOperationResponseEncoder::encodeGetClassResponse(
457 mday            1.9     CIMGetClassResponseMessage* response)
458 mike            1.2  {
459 mike            1.60 	Buffer body;
460 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
461                      		XmlWriter::appendClassElement(body, response->cimClass);
462                      	sendResponse(response, "GetClass", true, &body);
463 mike            1.2  }
464                      
465                      void CIMOperationResponseEncoder::encodeModifyClassResponse(
466 mday            1.9     CIMModifyClassResponseMessage* response)
467 mike            1.2  {
468 brian.campbell  1.52 	sendResponse(response, "ModifyClass", true);
469 mike            1.2  }
470                      
471                      void CIMOperationResponseEncoder::encodeEnumerateClassNamesResponse(
472 mday            1.9     CIMEnumerateClassNamesResponseMessage* response)
473 mike            1.2  {
474 mike            1.60 	Buffer body;
475 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
476                      		for (Uint32 i = 0, n = response->classNames.size(); i < n; i++)
477                      			XmlWriter::appendClassNameElement(body, response->classNames[i]);
478                      	sendResponse(response, "EnumerateClassNames", true, &body);
479 mike            1.2  }
480                      
481                      void CIMOperationResponseEncoder::encodeEnumerateClassesResponse(
482 mday            1.9     CIMEnumerateClassesResponseMessage* 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->cimClasses.size(); i < n; i++)
487                      			XmlWriter::appendClassElement(body, response->cimClasses[i]);
488                      	sendResponse(response, "EnumerateClasses", true, &body);
489 mike            1.2  }
490                      
491                      void CIMOperationResponseEncoder::encodeDeleteClassResponse(
492 mday            1.9     CIMDeleteClassResponseMessage* response)
493 mike            1.2  {
494 brian.campbell  1.52 	sendResponse(response, "DeleteClass", true);
495 mike            1.2  }
496                      
497                      void CIMOperationResponseEncoder::encodeCreateInstanceResponse(
498 mday            1.9     CIMCreateInstanceResponseMessage* response)
499 mike            1.2  {
500 mike            1.60    Buffer body;
501 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
502                      		 XmlWriter::appendInstanceNameElement(body, response->instanceName);
503                      	 sendResponse(response, "CreateInstance", true, &body);
504 mike            1.2  }
505                      
506                      void CIMOperationResponseEncoder::encodeGetInstanceResponse(
507 mday            1.9     CIMGetInstanceResponseMessage* response)
508 mike            1.2  {
509 mike            1.60    Buffer body;
510 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
511                      		 XmlWriter::appendInstanceElement(body, response->cimInstance);
512                      	 sendResponse(response, "GetInstance", true, &body);
513 mike            1.2  }
514                      
515                      void CIMOperationResponseEncoder::encodeModifyInstanceResponse(
516 mday            1.9     CIMModifyInstanceResponseMessage* response)
517 mike            1.2  {
518 brian.campbell  1.52 	sendResponse(response, "ModifyInstance", true);
519 mike            1.2  }
520                      
521                      void CIMOperationResponseEncoder::encodeEnumerateInstancesResponse(
522 mday            1.9     CIMEnumerateInstancesResponseMessage* response)
523 mike            1.2  {
524 mike            1.60 	Buffer body;
525 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
526                      		for (Uint32 i = 0, n = response->cimNamedInstances.size(); i < n; i++)
527                      			XmlWriter::appendValueNamedInstanceElement(body, response->cimNamedInstances[i]);
528                      	sendResponse(response, "EnumerateInstances", true, &body);
529 mike            1.2  }
530                      
531                      void CIMOperationResponseEncoder::encodeEnumerateInstanceNamesResponse(
532 mday            1.9     CIMEnumerateInstanceNamesResponseMessage* 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->instanceNames.size(); i < n; i++)
537                      			 XmlWriter::appendInstanceNameElement(body, response->instanceNames[i]);
538                      	 sendResponse(response, "EnumerateInstanceNames", true, &body);
539 mike            1.2  }
540                      
541                      void CIMOperationResponseEncoder::encodeDeleteInstanceResponse(
542 mday            1.9     CIMDeleteInstanceResponseMessage* response)
543 mike            1.2  {
544 brian.campbell  1.52 	sendResponse(response, "DeleteInstance", true);
545 mike            1.2  }
546                      
547                      void CIMOperationResponseEncoder::encodeGetPropertyResponse(
548 mday            1.9     CIMGetPropertyResponseMessage* response)
549 mike            1.2  {
550 mike            1.60 	Buffer body;
551 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
552                      		XmlWriter::appendValueElement(body, response->value);
553                      	sendResponse(response, "GetProperty", true, &body);
554 mike            1.2  }
555                      
556                      void CIMOperationResponseEncoder::encodeSetPropertyResponse(
557 mday            1.9     CIMSetPropertyResponseMessage* response)
558 mike            1.2  {
559 brian.campbell  1.52 	sendResponse(response, "SetProperty", true);
560 mike            1.2  }
561                      
562                      void CIMOperationResponseEncoder::encodeSetQualifierResponse(
563 mday            1.9     CIMSetQualifierResponseMessage* response)
564 mike            1.2  {
565 brian.campbell  1.52 	sendResponse(response, "SetQualifier", true);
566 mike            1.2  }
567                      
568                      void CIMOperationResponseEncoder::encodeGetQualifierResponse(
569 mday            1.9     CIMGetQualifierResponseMessage* response)
570 mike            1.2  {
571 mike            1.60 	Buffer body;
572 brian.campbell  1.52 	if (response->cimException.getCode() == CIM_ERR_SUCCESS)
573                      		XmlWriter::appendQualifierDeclElement(body, response->cimQualifierDecl);
574                      	sendResponse(response, "GetQualifier", true, &body);
575 mike            1.2  }
576                      
577                      void CIMOperationResponseEncoder::encodeEnumerateQualifiersResponse(
578 mday            1.9     CIMEnumerateQualifiersResponseMessage* response)
579 mike            1.2  {
580 mike            1.60    Buffer body;
581 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
582                      		 for (Uint32 i = 0, n = response->qualifierDeclarations.size(); i < n;i++)
583                      			 XmlWriter::appendQualifierDeclElement(body, response->qualifierDeclarations[i]);
584                      	 sendResponse(response, "EnumerateQualifiers", true, &body);
585 mike            1.2  }
586                      
587                      void CIMOperationResponseEncoder::encodeDeleteQualifierResponse(
588 mday            1.9     CIMDeleteQualifierResponseMessage* response)
589 mike            1.2  {
590 brian.campbell  1.52 	sendResponse(response, "DeleteQualifier", true);
591 mike            1.2  }
592                      
593                      void CIMOperationResponseEncoder::encodeReferenceNamesResponse(
594 mday            1.9     CIMReferenceNamesResponseMessage* response)
595 mike            1.2  {
596 mike            1.60    Buffer body;
597 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
598                      		 for (Uint32 i = 0, n = response->objectNames.size(); i < n; i++)
599                      		 {
600                      			 body << "<OBJECTPATH>\n";
601                      			 XmlWriter::appendValueReferenceElement(body, response->objectNames[i],
602                      																							false);
603                      			 body << "</OBJECTPATH>\n";
604                      		 }
605                      	 sendResponse(response, "ReferenceNames", true, &body);
606 mike            1.2  }
607                      
608                      void CIMOperationResponseEncoder::encodeReferencesResponse(
609 mday            1.9     CIMReferencesResponseMessage* response)
610 mike            1.2  {
611 mike            1.60    Buffer body;
612 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
613                      		 for (Uint32 i = 0, n = response->cimObjects.size(); i < n;i++)
614                      			 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
615                      	 sendResponse(response, "References", true, &body);
616 mike            1.2  }
617                      
618                      void CIMOperationResponseEncoder::encodeAssociatorNamesResponse(
619 mday            1.9     CIMAssociatorNamesResponseMessage* 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->objectNames.size(); i < n; i++)
624                      		 {
625                      			 body << "<OBJECTPATH>\n";
626                      			 XmlWriter::appendValueReferenceElement(body, response->objectNames[i], false);
627                      			 body << "</OBJECTPATH>\n";
628                      		 }
629                      	 sendResponse(response, "AssociatorNames", true, &body);
630 mike            1.2  }
631                      
632                      void CIMOperationResponseEncoder::encodeAssociatorsResponse(
633 mday            1.9     CIMAssociatorsResponseMessage* response)
634 mike            1.2  {
635 mike            1.60    Buffer body;
636 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
637                      		 for (Uint32 i = 0, n = response->cimObjects.size(); i < n; i++)
638                      			 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
639                      	 sendResponse(response, "Associators", true, &body);
640 kumpf           1.14 }
641                      
642                      void CIMOperationResponseEncoder::encodeExecQueryResponse(
643                         CIMExecQueryResponseMessage* response)
644                      {
645 mike            1.60    Buffer body;
646 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
647                      		 for (Uint32 i = 0; i < response->cimObjects.size(); i++)
648                      			 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
649                      	 sendResponse(response, "ExecQuery", true, &body);
650 mike            1.2  }
651                      
652                      void CIMOperationResponseEncoder::encodeInvokeMethodResponse(
653 mday            1.26     CIMInvokeMethodResponseMessage* response)
654 mike            1.2  {
655 mike            1.60    Buffer body;
656 mday            1.9  
657                         // ATTN-RK-P3-20020219: Who's job is it to make sure the return value is
658                         // not an array?
659 kumpf           1.17    // Only add the return value if it is not null
660 w.white         1.47 
661 brian.campbell  1.52 	 if (response->cimException.getCode() == CIM_ERR_SUCCESS)
662                      	 {
663                      		 if (!response->retValue.isNull())
664                      			 XmlWriter::appendReturnValueElement(body, response->retValue);
665                      		 
666                      		 for (Uint32 i=0, n = response->outParameters.size(); i < n; i++)
667                      			 XmlWriter::appendParamValueElement(body, response->outParameters[i]);
668                      	 }
669                      	 sendResponse(response, response->methodName.getString(), false, &body);
670 mike            1.2  }
671                      
672                      PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2