1 martin 1.3 //%LICENSE////////////////////////////////////////////////////////////////
|
2 martin 1.4 //
|
3 martin 1.3 // Licensed to The Open Group (TOG) under one or more contributor license
4 // agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
5 // this work for additional information regarding copyright ownership.
6 // Each contributor licenses this file to you under the OpenPegasus Open
7 // Source License; you may not use this file except in compliance with the
8 // License.
|
9 martin 1.4 //
|
10 martin 1.3 // Permission is hereby granted, free of charge, to any person obtaining a
11 // copy of this software and associated documentation files (the "Software"),
12 // to deal in the Software without restriction, including without limitation
13 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 // and/or sell copies of the Software, and to permit persons to whom the
15 // Software is furnished to do so, subject to the following conditions:
|
16 martin 1.4 //
|
17 martin 1.3 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
|
19 martin 1.4 //
|
20 martin 1.3 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
21 martin 1.4 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22 martin 1.3 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
24 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
27 martin 1.4 //
|
28 martin 1.3 //////////////////////////////////////////////////////////////////////////
|
29 mike 1.1 //
30 //%/////////////////////////////////////////////////////////////////////////////
31
32 #include <Pegasus/Common/StatisticalData.h>
33 #include "XmlWriter.h"
34 #include "BinaryCodec.h"
35 #include "CIMBuffer.h"
36 #include "StringConversion.h"
37 #include "Print.h"
38
39 #define ENABLE_VALIDATION
40
41 #if defined(_EQUAL)
42 # undef _EQUAL
43 #endif
44
45 #define _EQUAL(X, Y) (X.size() == (sizeof(Y)-1) && String::equalNoCase(X, Y))
46
47 // Header flags:
48 #define LOCAL_ONLY (1 << 0)
49 #define INCLUDE_QUALIFIERS (1 << 1)
50 mike 1.1 #define INCLUDE_CLASS_ORIGIN (1 << 2)
51 #define DEEP_INHERITANCE (1 << 3)
52
53 PEGASUS_NAMESPACE_BEGIN
54
55 //==============================================================================
56 //
57 // Local definitions:
58 //
59 //==============================================================================
60
61 static const Uint32 _MAGIC = 0xF00DFACE;
62 static const Uint32 _REVERSE_MAGIC = 0xCEFA0DF0;
63 static const Uint32 _VERSION = 1;
64 static const size_t _DEFAULT_CIM_BUFFER_SIZE = 16*1024;
65
66 enum Operation
67 {
68 OP_Invalid,
69 OP_GetClass,
70 OP_GetInstance,
71 mike 1.1 OP_IndicationDelivery,
72 OP_DeleteClass,
73 OP_DeleteInstance,
74 OP_CreateClass,
75 OP_CreateInstance,
76 OP_ModifyClass,
77 OP_ModifyInstance,
78 OP_EnumerateClasses,
79 OP_EnumerateClassNames,
80 OP_EnumerateInstances,
81 OP_EnumerateInstanceNames,
82 OP_ExecQuery,
83 OP_Associators,
84 OP_AssociatorNames,
85 OP_References,
86 OP_ReferenceNames,
87 OP_GetProperty,
88 OP_SetProperty,
89 OP_GetQualifier,
90 OP_SetQualifier,
91 OP_DeleteQualifier,
92 mike 1.1 OP_EnumerateQualifiers,
93 OP_InvokeMethod,
|
94 kumpf 1.2 OP_Count
|
95 mike 1.1 };
96
97 struct CIMBufferReleaser
98 {
99 CIMBufferReleaser(CIMBuffer& buf) : _buf(buf)
100 {
101 }
102
103 ~CIMBufferReleaser()
104 {
105 _buf.release();
106 }
107
108 private:
109 CIMBuffer& _buf;
110 };
111
112 static Operation _NameToOp(const CIMName& name)
113 {
114 const String& s = name.getString();
115
116 mike 1.1 switch (s[0])
117 {
118 case 'A':
119 if (_EQUAL(s, "Associators"))
120 return OP_Associators;
121 if (_EQUAL(s, "AssociatorNames"))
122 return OP_AssociatorNames;
123 break;
124 case 'C':
125 if (_EQUAL(s, "CreateInstance"))
126 return OP_CreateInstance;
127 if (_EQUAL(s, "CreateClass"))
128 return OP_CreateClass;
129 break;
130 case 'D':
131 if (_EQUAL(s, "DeleteInstance"))
132 return OP_DeleteInstance;
133 if (_EQUAL(s, "DeleteClass"))
134 return OP_DeleteClass;
135 if (_EQUAL(s, "DeleteQualifier"))
136 return OP_DeleteQualifier;
137 mike 1.1 break;
138 case 'E':
139 if (_EQUAL(s, "EnumerateInstances"))
140 return OP_EnumerateInstances;
141 if (_EQUAL(s, "EnumerateInstanceNames"))
142 return OP_EnumerateInstanceNames;
143 if (_EQUAL(s, "ExecQuery"))
144 return OP_ExecQuery;
145 if (_EQUAL(s, "EnumerateClassNames"))
146 return OP_EnumerateClassNames;
147 if (_EQUAL(s, "EnumerateClasses"))
148 return OP_EnumerateClasses;
149 if (_EQUAL(s, "EnumerateQualifiers"))
150 return OP_EnumerateQualifiers;
151 break;
152 case 'G':
153 if (_EQUAL(s, "GetInstance"))
154 return OP_GetInstance;
155 if (_EQUAL(s, "GetClass"))
156 return OP_GetClass;
157 if (_EQUAL(s, "GetQualifier"))
158 mike 1.1 return OP_GetQualifier;
159 if (_EQUAL(s, "GetProperty"))
160 return OP_GetProperty;
161 break;
162 case 'I':
163 if (_EQUAL(s, "InvokeMethod"))
164 return OP_InvokeMethod;
165 if (_EQUAL(s, "IndicationDelivery"))
166 return OP_IndicationDelivery;
167 break;
168 case 'M':
169 if (_EQUAL(s, "ModifyInstance"))
170 return OP_ModifyInstance;
171 if (_EQUAL(s, "ModifyClass"))
172 return OP_ModifyClass;
173 break;
174 case 'R':
175 if (_EQUAL(s, "References"))
176 return OP_References;
177 if (_EQUAL(s, "ReferenceNames"))
178 return OP_ReferenceNames;
179 mike 1.1 break;
180 case 'S':
181 if (_EQUAL(s, "SetQualifier"))
182 return OP_SetQualifier;
183 if (_EQUAL(s, "SetProperty"))
184 return OP_SetProperty;
185 break;
186 }
187
188 // Unknown, se we will assume it is an extrinsic method!
189 return OP_InvokeMethod;
190 }
191
192 static void _putHeader(
193 CIMBuffer& out,
194 Uint32 flags,
195 const String& messageId,
196 Operation operation)
197 {
198 // [MAGIC]
199 out.putUint32(_MAGIC);
200 mike 1.1
201 // [VERSION]
202 out.putUint32(_VERSION);
203
204 // [FLAGS]
205 out.putUint32(flags);
206
207 // [MESSAGEID]
208 out.putString(messageId);
209
210 // [OPERATION]
211 out.putUint32(operation);
212 }
213
214 static bool _getHeader(
215 CIMBuffer& in,
216 Uint32& flags,
217 String& messageId,
218 Operation& operation_)
219 {
220 Uint32 magic;
221 mike 1.1 Uint32 version;
222
223 // [MAGIC]
224 if (!in.getUint32(magic))
225 return false;
226
227 if (magic != _MAGIC)
228 {
229 if (magic != _REVERSE_MAGIC)
230 return false;
231
232 // Sender has opposite endianess so turn on endian swapping:
233 in.setSwap(true);
234 }
235
236 // [VERSION]
237 if (!in.getUint32(version) || version != _VERSION)
238 return false;
239
240 // [FLAGS]
241 if (!in.getUint32(flags))
242 mike 1.1 return false;
243
244 // [MESSAGEID]
245 if (!in.getString(messageId))
246 return false;
247
248 // [OPERATION]
249 {
250 Uint32 op;
251
252 if (!in.getUint32(op) || op == OP_Invalid || op >= OP_Count)
253 return false;
254
255 operation_ = Operation(op);
256 }
257
258 return true;
259 }
260
261 //==============================================================================
262 //
263 mike 1.1 // EnumerateInstances
264 //
265 //==============================================================================
266
267 static void _encodeEnumerateInstancesRequest(
268 CIMBuffer& buf,
269 CIMEnumerateInstancesRequestMessage* msg,
270 CIMName& name)
271 {
272 /* See ../Client/CIMOperationRequestEncoder.cpp */
273
274 static const CIMName NAME("EnumerateInstances");
275 name = NAME;
276
277 // [HEADER]
278
279 Uint32 flags = 0;
280
281 if (msg->deepInheritance)
282 flags |= DEEP_INHERITANCE;
283
284 mike 1.1 if (msg->includeQualifiers)
285 flags |= INCLUDE_QUALIFIERS;
286
287 if (msg->includeClassOrigin)
288 flags |= INCLUDE_CLASS_ORIGIN;
289
290 _putHeader(buf, flags, msg->messageId, OP_EnumerateInstances);
291
292 // [NAMESPACE]
293 buf.putNamespaceName(msg->nameSpace);
294
295 // [CLASSNAME]
296 buf.putName(msg->className);
297
298 // [PROPERTY-LIST]
299 buf.putPropertyList(msg->propertyList);
300 }
301
302 static CIMEnumerateInstancesRequestMessage* _decodeEnumerateInstancesRequest(
303 CIMBuffer& in,
304 Uint32 queueId,
305 mike 1.1 Uint32 returnQueueId,
306 Uint32 flags,
307 const String& messageId)
308 {
309 /* See ../Server/CIMOperationRequestDecoder.cpp */
310
311 STAT_GETSTARTTIME
312
313 Boolean deepInheritance = flags & DEEP_INHERITANCE;
314 Boolean includeQualifiers = flags & INCLUDE_QUALIFIERS;
315 Boolean includeClassOrigin = flags & INCLUDE_CLASS_ORIGIN;
316
317 // [NAMESPACE]
318
319 CIMNamespaceName nameSpace;
320
321 if (!in.getNamespaceName(nameSpace))
322 return 0;
323
324 // [CLASSNAME]
325 CIMName className;
326 mike 1.1
327 if (!in.getName(className))
328 return 0;
329
330 // [PROPERTY-LIST]
331 CIMPropertyList propertyList;
332 if (!in.getPropertyList(propertyList))
333 return 0;
334
335 AutoPtr<CIMEnumerateInstancesRequestMessage> request(
336 new CIMEnumerateInstancesRequestMessage(
337 messageId,
338 nameSpace,
339 className,
340 deepInheritance,
341 #ifdef PEGASUS_DISABLE_INSTANCE_QUALIFIERS
342 false,
343 #else
344 includeQualifiers,
345 #endif
346 includeClassOrigin,
347 mike 1.1 propertyList,
348 QueueIdStack(queueId, returnQueueId)));
349
350 request->binaryRequest = true;
351
352 STAT_SERVERSTART
353
354 return request.release();
355 }
356
357 static void _encodeEnumerateInstancesResponseBody(
358 CIMBuffer& out,
|
359 r.kieninger 1.8 CIMInstancesResponseData& data,
|
360 mike 1.1 CIMName& name)
361 {
362 /* See ../Server/CIMOperationResponseEncoder.cpp */
363
364 static const CIMName NAME("EnumerateInstances");
365 name = NAME;
366
|
367 r.kieninger 1.8 data.encodeBinaryResponse(out);
|
368 mike 1.1 }
369
370 static CIMEnumerateInstancesResponseMessage* _decodeEnumerateInstancesResponse(
371 CIMBuffer& in,
372 Uint32 flags,
373 const String& messageId)
374 {
375 /* See ../Client/CIMOperationResponseDecoder.cpp */
376
377 Array<CIMInstance> instances;
378
379 while (in.more())
380 {
381 Array<CIMInstance> tmp;
382
383 if (!in.getInstanceA(tmp))
384 return 0;
385
386 instances.append(tmp.getData(), tmp.size());
387 }
388
389 mike 1.1 CIMEnumerateInstancesResponseMessage* msg;
390 CIMException cimException;
391
392 msg = new CIMEnumerateInstancesResponseMessage(
393 messageId,
394 cimException,
395 QueueIdStack());
396
|
397 r.kieninger 1.8 msg->getResponseData().setNamedInstances(instances);
|
398 mike 1.1 msg->binaryRequest = true;
399 return msg;
400 }
401
402 //==============================================================================
403 //
404 // EnumerateInstanceNames
405 //
406 //==============================================================================
407
|
408 kumpf 1.6 static CIMEnumerateInstanceNamesRequestMessage*
|
409 mike 1.1 _decodeEnumerateInstanceNamesRequest(
410 CIMBuffer& in,
411 Uint32 queueId,
412 Uint32 returnQueueId,
413 Uint32 flags,
414 const String& messageId)
415 {
416 STAT_GETSTARTTIME
417
418 // [NAMESPACE]
419 CIMNamespaceName nameSpace;
420
421 if (!in.getNamespaceName(nameSpace))
422 return 0;
423
424 // [CLASSNAME]
425 CIMName className;
426
427 if (!in.getName(className))
428 return 0;
429
430 mike 1.1 AutoPtr<CIMEnumerateInstanceNamesRequestMessage> request(
431 new CIMEnumerateInstanceNamesRequestMessage(
432 messageId,
433 nameSpace,
434 className,
435 QueueIdStack(queueId, returnQueueId)));
436
437 request->binaryRequest = true;
438
439 STAT_SERVERSTART
440
441 return request.release();
442 }
443
|
444 kumpf 1.6 static CIMEnumerateInstanceNamesResponseMessage*
|
445 mike 1.1 _decodeEnumerateInstanceNamesResponse(
446 CIMBuffer& in,
447 Uint32 flags,
448 const String& messageId)
449 {
450 Array<CIMObjectPath> instanceNames;
451
452 while (in.more())
453 {
454 Array<CIMObjectPath> tmp;
455
456 if (!in.getObjectPathA(tmp))
457 return 0;
458
459 instanceNames.append(tmp.getData(), tmp.size());
460 }
461
462 CIMEnumerateInstanceNamesResponseMessage* msg;
463 CIMException cimException;
464
465 msg = new CIMEnumerateInstanceNamesResponseMessage(
466 mike 1.1 messageId,
467 cimException,
468 QueueIdStack(),
469 instanceNames);
470
471 msg->binaryRequest = true;
472 return msg;
473 }
474
475 static void _encodeEnumerateInstanceNamesRequest(
476 CIMBuffer& buf,
477 CIMEnumerateInstanceNamesRequestMessage* msg,
478 CIMName& name)
479 {
480 static const CIMName NAME("EnumerateInstanceNames");
481 name = NAME;
482
483 // [HEADER]
484
485 _putHeader(buf, 0, msg->messageId, OP_EnumerateInstanceNames);
486
487 mike 1.1 // [NAMESPACE]
488 buf.putNamespaceName(msg->nameSpace);
489
490 // [CLASSNAME]
491 buf.putName(msg->className);
492 }
493
494 static void _encodeEnumerateInstanceNamesResponseBody(
495 CIMBuffer& out,
496 CIMEnumerateInstanceNamesResponseMessage* msg,
497 CIMName& name)
498 {
499 static const CIMName NAME("EnumerateInstanceNames");
500 name = NAME;
501
502 out.putObjectPathA(msg->instanceNames, false);
503 }
504
505 //==============================================================================
506 //
507 // GetInstance
508 mike 1.1 //
509 //==============================================================================
510
511 static CIMGetInstanceRequestMessage* _decodeGetInstanceRequest(
512 CIMBuffer& in,
513 Uint32 queueId,
514 Uint32 returnQueueId,
515 Uint32 flags,
516 const String& messageId)
517 {
518 STAT_GETSTARTTIME
519
520 // [FLAGS]
521
522 Boolean includeQualifiers = flags & INCLUDE_QUALIFIERS;
523 Boolean includeClassOrigin = flags & INCLUDE_CLASS_ORIGIN;
524
525 // [NAMESPACE]
526 CIMNamespaceName nameSpace;
527
528 if (!in.getNamespaceName(nameSpace))
529 mike 1.1 return 0;
530
531 // [INSTANCE-NAME]
532 CIMObjectPath instanceName;
533
534 if (!in.getObjectPath(instanceName))
535 return 0;
536
537 // [PROPERTY-LIST]
538 CIMPropertyList propertyList;
539 if (!in.getPropertyList(propertyList))
540 return 0;
541
542 AutoPtr<CIMGetInstanceRequestMessage> request(
543 new CIMGetInstanceRequestMessage(
544 messageId,
545 nameSpace,
546 instanceName,
547 #ifdef PEGASUS_DISABLE_INSTANCE_QUALIFIERS
548 false,
549 #else
550 mike 1.1 includeQualifiers,
551 #endif
552 includeClassOrigin,
553 propertyList,
554 QueueIdStack(queueId, returnQueueId)));
555
556 request->binaryRequest = true;
557
558 STAT_SERVERSTART
559
560 return request.release();
561 }
562
563 static CIMGetInstanceResponseMessage* _decodeGetInstanceResponse(
564 CIMBuffer& in,
565 Uint32 flags,
566 const String& messageId)
567 {
568 CIMInstance instance;
569
570 if (!in.getInstance(instance))
571 mike 1.1 return 0;
572
573 CIMGetInstanceResponseMessage* msg;
574 CIMException cimException;
575
576 msg = new CIMGetInstanceResponseMessage(
577 messageId,
578 cimException,
579 QueueIdStack());
580
|
581 r.kieninger 1.8 msg->getResponseData().setCimInstance(instance);
|
582 mike 1.1 msg->binaryRequest = true;
583 return msg;
584 }
585
586 static void _encodeGetInstanceRequest(
587 CIMBuffer& buf,
588 CIMGetInstanceRequestMessage* msg,
589 CIMName& name)
590 {
591 static const CIMName NAME("GetInstance");
592 name = NAME;
593
594 // [HEADER]
595
596 Uint32 flags = 0;
597
598 if (msg->includeQualifiers)
599 flags |= INCLUDE_QUALIFIERS;
600
601 if (msg->includeClassOrigin)
602 flags |= INCLUDE_CLASS_ORIGIN;
603 mike 1.1
604 _putHeader(buf, flags, msg->messageId, OP_GetInstance);
605
606 // [NAMESPACE]
607 buf.putNamespaceName(msg->nameSpace);
608
609 // [INSTANCE-NAME]
610 buf.putObjectPath(msg->instanceName);
611
612 // [PROPERTY-LIST]
613 buf.putPropertyList(msg->propertyList);
614 }
615
616 static void _encodeGetInstanceResponseBody(
617 CIMBuffer& out,
|
618 r.kieninger 1.8 CIMInstanceResponseData& data,
|
619 mike 1.1 CIMName& name)
620 {
621 static const CIMName NAME("GetInstance");
622 name = NAME;
623
|
624 r.kieninger 1.8 data.encodeBinaryResponse(out);
|
625 mike 1.1 }
626
627 //==============================================================================
628 //
629 // CreateInstance
630 //
631 //==============================================================================
632
633 static void _encodeCreateInstanceRequest(
634 CIMBuffer& buf,
635 CIMCreateInstanceRequestMessage* msg,
636 CIMName& name)
637 {
638 static const CIMName NAME("CreateInstance");
639 name = NAME;
640
641 // [HEADER]
642 _putHeader(buf, 0, msg->messageId, OP_CreateInstance);
643
644 // [NAMESPACE]
645 buf.putNamespaceName(msg->nameSpace);
646 mike 1.1
647 // [NEW-INSTANCE]
648 buf.putInstance(msg->newInstance, false);
649 }
650
651 static CIMCreateInstanceRequestMessage* _decodeCreateInstanceRequest(
652 CIMBuffer& in,
653 Uint32 queueId,
654 Uint32 returnQueueId,
655 Uint32 flags,
656 const String& messageId)
657 {
658 STAT_GETSTARTTIME
659
660 // [NAMESPACE]
661
662 CIMNamespaceName nameSpace;
663
664 if (!in.getNamespaceName(nameSpace))
665 return 0;
666
667 mike 1.1 // [NEW-INSTANCE]
668
669 CIMInstance newInstance;
670
671 if (!in.getInstance(newInstance))
672 return 0;
673
674 AutoPtr<CIMCreateInstanceRequestMessage> request(
675 new CIMCreateInstanceRequestMessage(
676 messageId,
677 nameSpace,
678 newInstance,
679 QueueIdStack(queueId, returnQueueId)));
680
681 request->binaryRequest = true;
682
683 STAT_SERVERSTART
684
685 return request.release();
686 }
687
688 mike 1.1 static void _encodeCreateInstanceResponseBody(
689 CIMBuffer& out,
690 CIMCreateInstanceResponseMessage* msg,
691 CIMName& name)
692 {
693 static const CIMName NAME("CreateInstance");
694 name = NAME;
695
696 out.putObjectPath(msg->instanceName, false);
697 }
698
699 static CIMCreateInstanceResponseMessage* _decodeCreateInstanceResponse(
700 CIMBuffer& in,
701 Uint32 flags,
702 const String& messageId)
703 {
704 CIMObjectPath instanceName;
705
706 if (!in.getObjectPath(instanceName))
707 return 0;
708
709 mike 1.1 CIMCreateInstanceResponseMessage* msg;
710 CIMException cimException;
711
712 msg = new CIMCreateInstanceResponseMessage(
713 messageId,
714 cimException,
715 QueueIdStack(),
716 instanceName);
717
718 msg->binaryRequest = true;
719
720 return msg;
721 }
722
723 //==============================================================================
724 //
725 // ModifyInstance
726 //
727 //==============================================================================
728
729 static void _encodeModifyInstanceRequest(
730 mike 1.1 CIMBuffer& buf,
731 CIMModifyInstanceRequestMessage* msg,
732 CIMName& name)
733 {
734 /* See ../Client/CIMOperationRequestEncoder.cpp */
735
736 static const CIMName NAME("ModifyInstance");
737 name = NAME;
738
739 // [HEADER]
740
741 Uint32 flags = 0;
742
743 if (msg->includeQualifiers)
744 flags |= INCLUDE_QUALIFIERS;
745
746 _putHeader(buf, flags, msg->messageId, OP_ModifyInstance);
747
748 // [NAMESPACE]
749 buf.putNamespaceName(msg->nameSpace);
750
751 mike 1.1 // [MODIFIED-INSTANCE]
752 buf.putInstance(msg->modifiedInstance, false);
753
754 // [PROPERTY-LIST]
755 buf.putPropertyList(msg->propertyList);
756 }
757
758 static CIMModifyInstanceRequestMessage* _decodeModifyInstanceRequest(
759 CIMBuffer& in,
760 Uint32 queueId,
761 Uint32 returnQueueId,
762 Uint32 flags,
763 const String& messageId)
764 {
765 /* See ../Server/CIMOperationRequestDecoder.cpp */
766
767 STAT_GETSTARTTIME
768
769 Boolean includeQualifiers = flags & INCLUDE_QUALIFIERS;
770
771 // [NAMESPACE]
772 mike 1.1
773 CIMNamespaceName nameSpace;
774
775 if (!in.getNamespaceName(nameSpace))
776 return 0;
777
778 // [MODIFIED-INSTANCE]
779 CIMInstance modifiedInstance;
780
781 if (!in.getInstance(modifiedInstance))
782 return 0;
783
784 // [PROPERTY-LIST]
785 CIMPropertyList propertyList;
786 if (!in.getPropertyList(propertyList))
787 return 0;
788
789 AutoPtr<CIMModifyInstanceRequestMessage> request(
790 new CIMModifyInstanceRequestMessage(
791 messageId,
792 nameSpace,
793 mike 1.1 modifiedInstance,
794 includeQualifiers,
795 propertyList,
796 QueueIdStack(queueId, returnQueueId)));
797
798 request->binaryRequest = true;
799
800 STAT_SERVERSTART
801
802 return request.release();
803 }
804
805 static void _encodeModifyInstanceResponseBody(
806 CIMBuffer& out,
807 CIMModifyInstanceResponseMessage* msg,
808 CIMName& name)
809 {
810 /* See ../Server/CIMOperationResponseEncoder.cpp */
811
812 static const CIMName NAME("ModifyInstance");
813 name = NAME;
814 mike 1.1 }
815
816 static CIMModifyInstanceResponseMessage* _decodeModifyInstanceResponse(
817 CIMBuffer& in,
818 Uint32 flags,
819 const String& messageId)
820 {
821 /* See ../Client/CIMOperationResponseDecoder.cpp */
822
823 Array<CIMInstance> instances;
824
825 while (in.more())
826 {
827 Array<CIMInstance> tmp;
828
829 if (!in.getInstanceA(tmp))
830 return 0;
831
832 instances.append(tmp.getData(), tmp.size());
833 }
834
835 mike 1.1 CIMModifyInstanceResponseMessage* msg;
836 CIMException cimException;
837
838 msg = new CIMModifyInstanceResponseMessage(
839 messageId,
840 cimException,
841 QueueIdStack());
842
843 msg->binaryRequest = true;
844 return msg;
845 }
846
847 //==============================================================================
848 //
849 // DeleteInstance
850 //
851 //==============================================================================
852
853 static void _encodeDeleteInstanceRequest(
854 CIMBuffer& buf,
855 CIMDeleteInstanceRequestMessage* msg,
856 mike 1.1 CIMName& name)
857 {
858 /* See ../Client/CIMOperationRequestEncoder.cpp */
859
860 static const CIMName NAME("DeleteInstance");
861 name = NAME;
862
863 // [HEADER]
864 _putHeader(buf, 0, msg->messageId, OP_DeleteInstance);
865
866 // [NAMESPACE]
867 buf.putNamespaceName(msg->nameSpace);
868
869 // [INSTANCE-NAME]
870 buf.putObjectPath(msg->instanceName, false);
871 }
872
873 static CIMDeleteInstanceRequestMessage* _decodeDeleteInstanceRequest(
874 CIMBuffer& in,
875 Uint32 queueId,
876 Uint32 returnQueueId,
877 mike 1.1 Uint32 flags,
878 const String& messageId)
879 {
880 /* See ../Server/CIMOperationRequestDecoder.cpp */
881
882 STAT_GETSTARTTIME
883
884 // [NAMESPACE]
885 CIMNamespaceName nameSpace;
886
887 if (!in.getNamespaceName(nameSpace))
888 return 0;
889
890 // [INSTANCE-NAME]
891 CIMObjectPath instanceName;
892
893 if (!in.getObjectPath(instanceName))
894 return 0;
895
896 AutoPtr<CIMDeleteInstanceRequestMessage> request(
897 new CIMDeleteInstanceRequestMessage(
898 mike 1.1 messageId,
899 nameSpace,
900 instanceName,
901 QueueIdStack(queueId, returnQueueId)));
902
903 request->binaryRequest = true;
904
905 STAT_SERVERSTART
906
907 return request.release();
908 }
909
910 static void _encodeDeleteInstanceResponseBody(
911 CIMBuffer& out,
912 CIMDeleteInstanceResponseMessage* msg,
913 CIMName& name)
914 {
915 /* See ../Server/CIMOperationResponseEncoder.cpp */
916
917 static const CIMName NAME("DeleteInstance");
918 name = NAME;
919 mike 1.1 }
920
921 static CIMDeleteInstanceResponseMessage* _decodeDeleteInstanceResponse(
922 CIMBuffer& in,
923 Uint32 flags,
924 const String& messageId)
925 {
926 /* See ../Client/CIMOperationResponseDecoder.cpp */
927
928 CIMDeleteInstanceResponseMessage* msg;
929 CIMException cimException;
930
931 msg = new CIMDeleteInstanceResponseMessage(
932 messageId,
933 cimException,
934 QueueIdStack());
935
936 msg->binaryRequest = true;
937 return msg;
938 }
939
940 mike 1.1 //==============================================================================
941 //
942 // Associators
943 //
944 //==============================================================================
945
946 static void _encodeAssociatorsRequest(
947 CIMBuffer& buf,
948 CIMAssociatorsRequestMessage* msg,
949 CIMName& name)
950 {
951 /* See ../Client/CIMOperationRequestEncoder.cpp */
952
953 static const CIMName NAME("Associators");
954 name = NAME;
955
956 // [HEADER]
957
958 Uint32 flags = 0;
959
960 if (msg->includeQualifiers)
961 mike 1.1 flags |= INCLUDE_QUALIFIERS;
962
963 if (msg->includeClassOrigin)
964 flags |= INCLUDE_CLASS_ORIGIN;
965
966 _putHeader(buf, flags, msg->messageId, OP_Associators);
967
968 // [NAMESPACE]
969 buf.putNamespaceName(msg->nameSpace);
970
971 // [OBJECT-NAME]
972 buf.putObjectPath(msg->objectName);
973
974 // [ASSOC-CLASS]
975 buf.putName(msg->assocClass);
976
977 // [RESULT-CLASS]
978 buf.putName(msg->resultClass);
979
980 // [ROLE]
981 buf.putString(msg->role);
982 mike 1.1
983 // [RESULT-ROLE]
984 buf.putString(msg->resultRole);
985
986 // [PROPERTY-LIST]
987 buf.putPropertyList(msg->propertyList);
988 }
989
990 static CIMAssociatorsRequestMessage* _decodeAssociatorsRequest(
991 CIMBuffer& in,
992 Uint32 queueId,
993 Uint32 returnQueueId,
994 Uint32 flags,
995 const String& messageId)
996 {
997 /* See ../Server/CIMOperationRequestDecoder.cpp */
998
999 STAT_GETSTARTTIME
1000
1001 Boolean includeQualifiers = flags & INCLUDE_QUALIFIERS;
1002 Boolean includeClassOrigin = flags & INCLUDE_CLASS_ORIGIN;
1003 mike 1.1
1004 // [NAMESPACE]
1005
1006 CIMNamespaceName nameSpace;
1007
1008 if (!in.getNamespaceName(nameSpace))
1009 return 0;
1010
1011 // [OBJECT-NAME]
1012 CIMObjectPath objectName;
1013
1014 if (!in.getObjectPath(objectName))
1015 return 0;
1016
1017 // [ASSOC-CLASS]
1018
1019 CIMName assocClass;
1020
1021 if (!in.getName(assocClass))
1022 return 0;
1023
1024 mike 1.1 // [RESULT-CLASS]
1025
1026 CIMName resultClass;
1027
1028 if (!in.getName(resultClass))
1029 return 0;
1030
1031 // [ROLE]
1032
1033 String role;
1034
1035 if (!in.getString(role))
1036 return 0;
1037
1038 // [RESULT-ROLE]
1039
1040 String resultRole;
1041
1042 if (!in.getString(resultRole))
1043 return 0;
1044
1045 mike 1.1 // [PROPERTY-LIST]
1046
1047 CIMPropertyList propertyList;
1048
1049 if (!in.getPropertyList(propertyList))
1050 return 0;
1051
1052 AutoPtr<CIMAssociatorsRequestMessage> request(
1053 new CIMAssociatorsRequestMessage(
1054 messageId,
1055 nameSpace,
1056 objectName,
1057 assocClass,
1058 resultClass,
1059 role,
1060 resultRole,
1061 includeQualifiers,
1062 includeClassOrigin,
1063 propertyList,
1064 QueueIdStack(queueId, returnQueueId)));
1065
1066 mike 1.1 request->binaryRequest = true;
1067
1068 STAT_SERVERSTART
1069
1070 return request.release();
1071 }
1072
1073 static void _encodeAssociatorsResponseBody(
1074 CIMBuffer& out,
|
1075 r.kieninger 1.8 CIMObjectsResponseData& data,
|
1076 mike 1.1 CIMName& name)
1077 {
1078 /* See ../Server/CIMOperationResponseEncoder.cpp */
1079
1080 static const CIMName NAME("Associators");
1081 name = NAME;
1082
|
1083 r.kieninger 1.8
1084 data.encodeBinaryResponse(out);
|
1085 mike 1.1 }
1086
1087 static CIMAssociatorsResponseMessage* _decodeAssociatorsResponse(
1088 CIMBuffer& in,
1089 Uint32 flags,
1090 const String& messageId)
1091 {
1092 /* See ../Client/CIMOperationResponseDecoder.cpp */
1093
1094 Array<CIMObject> cimObjects;
1095
1096 while (in.more())
1097 {
1098 Array<CIMObject> tmp;
1099
1100 if (!in.getObjectA(tmp))
1101 return 0;
1102
1103 cimObjects.append(tmp.getData(), tmp.size());
1104 }
1105
1106 mike 1.1 CIMAssociatorsResponseMessage* msg;
1107 CIMException cimException;
1108
1109 msg = new CIMAssociatorsResponseMessage(
1110 messageId,
1111 cimException,
|
1112 r.kieninger 1.8 QueueIdStack());
|
1113 mike 1.1
|
1114 r.kieninger 1.8 msg->getResponseData().setCIMObjects(cimObjects);
|
1115 mike 1.1 msg->binaryRequest = true;
1116 return msg;
1117 }
1118
1119 //==============================================================================
1120 //
1121 // AssociatorNames
1122 //
1123 //==============================================================================
1124
1125 static void _encodeAssociatorNamesRequest(
1126 CIMBuffer& buf,
1127 CIMAssociatorNamesRequestMessage* msg,
1128 CIMName& name)
1129 {
1130 /* See ../Client/CIMOperationRequestEncoder.cpp */
1131
1132 static const CIMName NAME("AssociatorNames");
1133 name = NAME;
1134
1135 // [HEADER]
1136 mike 1.1 Uint32 flags = 0;
1137
1138 _putHeader(buf, flags, msg->messageId, OP_AssociatorNames);
1139
1140 // [NAMESPACE]
1141 buf.putNamespaceName(msg->nameSpace);
1142
1143 // [OBJECT-NAME]
1144 buf.putObjectPath(msg->objectName);
1145
1146 // [ASSOC-CLASS]
1147 buf.putName(msg->assocClass);
1148
1149 // [RESULT-CLASS]
1150 buf.putName(msg->resultClass);
1151
1152 // [ROLE]
1153 buf.putString(msg->role);
1154
1155 // [RESULT-ROLE]
1156 buf.putString(msg->resultRole);
1157 mike 1.1 }
1158
1159 static CIMAssociatorNamesRequestMessage* _decodeAssociatorNamesRequest(
1160 CIMBuffer& in,
1161 Uint32 queueId,
1162 Uint32 returnQueueId,
1163 Uint32 flags,
1164 const String& messageId)
1165 {
1166 /* See ../Server/CIMOperationRequestDecoder.cpp */
1167
1168 STAT_GETSTARTTIME
1169
1170 // [NAMESPACE]
1171
1172 CIMNamespaceName nameSpace;
1173
1174 if (!in.getNamespaceName(nameSpace))
1175 return 0;
1176
1177 // [OBJECT-NAME]
1178 mike 1.1 CIMObjectPath objectName;
1179
1180 if (!in.getObjectPath(objectName))
1181 return 0;
1182
1183 // [ASSOC-CLASS]
1184
1185 CIMName assocClass;
1186
1187 if (!in.getName(assocClass))
1188 return 0;
1189
1190 // [RESULT-CLASS]
1191
1192 CIMName resultClass;
1193
1194 if (!in.getName(resultClass))
1195 return 0;
1196
1197 // [ROLE]
1198
1199 mike 1.1 String role;
1200
1201 if (!in.getString(role))
1202 return 0;
1203
1204 // [RESULT-ROLE]
1205
1206 String resultRole;
1207
1208 if (!in.getString(resultRole))
1209 return 0;
1210
1211 AutoPtr<CIMAssociatorNamesRequestMessage> request(
1212 new CIMAssociatorNamesRequestMessage(
1213 messageId,
1214 nameSpace,
1215 objectName,
1216 assocClass,
1217 resultClass,
1218 role,
1219 resultRole,
1220 mike 1.1 QueueIdStack(queueId, returnQueueId)));
1221
1222 request->binaryRequest = true;
1223
1224 STAT_SERVERSTART
1225
1226 return request.release();
1227 }
1228
1229 static void _encodeAssociatorNamesResponseBody(
1230 CIMBuffer& out,
1231 CIMAssociatorNamesResponseMessage* msg,
1232 CIMName& name)
1233 {
1234 /* See ../Server/CIMOperationResponseEncoder.cpp */
1235
1236 static const CIMName NAME("AssociatorNames");
1237 name = NAME;
1238
1239 out.putObjectPathA(msg->objectNames);
1240 }
1241 mike 1.1
1242 static CIMAssociatorNamesResponseMessage* _decodeAssociatorNamesResponse(
1243 CIMBuffer& in,
1244 Uint32 flags,
1245 const String& messageId)
1246 {
1247 /* See ../Client/CIMOperationResponseDecoder.cpp */
1248
1249 Array<CIMObjectPath> objectNames;
1250
1251 while (in.more())
1252 {
1253 Array<CIMObjectPath> tmp;
1254
1255 if (!in.getObjectPathA(tmp))
1256 return 0;
1257
1258 objectNames.append(tmp.getData(), tmp.size());
1259 }
1260
1261 CIMAssociatorNamesResponseMessage* msg;
1262 mike 1.1 CIMException cimException;
1263
1264 msg = new CIMAssociatorNamesResponseMessage(
1265 messageId,
1266 cimException,
1267 QueueIdStack(),
1268 objectNames);
1269
1270 msg->binaryRequest = true;
1271 return msg;
1272 }
1273
1274 //==============================================================================
1275 //
1276 // References
1277 //
1278 //==============================================================================
1279
1280 static void _encodeReferencesRequest(
1281 CIMBuffer& buf,
1282 CIMReferencesRequestMessage* msg,
1283 mike 1.1 CIMName& name)
1284 {
1285 /* See ../Client/CIMOperationRequestEncoder.cpp */
1286
1287 static const CIMName NAME("References");
1288 name = NAME;
1289
1290 // [HEADER]
1291
1292 Uint32 flags = 0;
1293
1294 if (msg->includeQualifiers)
1295 flags |= INCLUDE_QUALIFIERS;
1296
1297 if (msg->includeClassOrigin)
1298 flags |= INCLUDE_CLASS_ORIGIN;
1299
1300 _putHeader(buf, flags, msg->messageId, OP_References);
1301
1302 // [NAMESPACE]
1303 buf.putNamespaceName(msg->nameSpace);
1304 mike 1.1
1305 // [OBJECT-NAME]
1306 buf.putObjectPath(msg->objectName);
1307
1308 // [RESULT-CLASS]
1309 buf.putName(msg->resultClass);
1310
1311 // [ROLE]
1312 buf.putString(msg->role);
1313
1314 // [PROPERTY-LIST]
1315 buf.putPropertyList(msg->propertyList);
1316 }
1317
1318 static CIMReferencesRequestMessage* _decodeReferencesRequest(
1319 CIMBuffer& in,
1320 Uint32 queueId,
1321 Uint32 returnQueueId,
1322 Uint32 flags,
1323 const String& messageId)
1324 {
1325 mike 1.1 /* See ../Server/CIMOperationRequestDecoder.cpp */
1326
1327 STAT_GETSTARTTIME
1328
1329 Boolean includeQualifiers = flags & INCLUDE_QUALIFIERS;
1330 Boolean includeClassOrigin = flags & INCLUDE_CLASS_ORIGIN;
1331
1332 // [NAMESPACE]
1333
1334 CIMNamespaceName nameSpace;
1335
1336 if (!in.getNamespaceName(nameSpace))
1337 return 0;
1338
1339 // [OBJECT-NAME]
1340
1341 CIMObjectPath objectName;
1342
1343 if (!in.getObjectPath(objectName))
1344 return 0;
1345
1346 mike 1.1 // [RESULT-CLASS]
1347
1348 CIMName resultClass;
1349
1350 if (!in.getName(resultClass))
1351 return 0;
1352
1353 // [ROLE]
1354
1355 String role;
1356
1357 if (!in.getString(role))
1358 return 0;
1359
1360 // [PROPERTY-LIST]
1361
1362 CIMPropertyList propertyList;
1363
1364 if (!in.getPropertyList(propertyList))
1365 return 0;
1366
1367 mike 1.1 AutoPtr<CIMReferencesRequestMessage> request(
1368 new CIMReferencesRequestMessage(
1369 messageId,
1370 nameSpace,
1371 objectName,
1372 resultClass,
1373 role,
1374 includeQualifiers,
1375 includeClassOrigin,
1376 propertyList,
1377 QueueIdStack(queueId, returnQueueId)));
1378
1379 request->binaryRequest = true;
1380
1381 STAT_SERVERSTART
1382
1383 return request.release();
1384 }
1385
1386 static void _encodeReferencesResponseBody(
1387 CIMBuffer& out,
1388 mike 1.1 CIMReferencesResponseMessage* msg,
1389 CIMName& name)
1390 {
1391 /* See ../Server/CIMOperationResponseEncoder.cpp */
1392
1393 static const CIMName NAME("References");
1394 name = NAME;
1395
1396 out.putObjectA(msg->cimObjects);
1397 }
1398
1399 static CIMReferencesResponseMessage* _decodeReferencesResponse(
1400 CIMBuffer& in,
1401 Uint32 flags,
1402 const String& messageId)
1403 {
1404 /* See ../Client/CIMOperationResponseDecoder.cpp */
1405
1406 Array<CIMObject> cimObjects;
1407
1408 while (in.more())
1409 mike 1.1 {
1410 Array<CIMObject> tmp;
1411
1412 if (!in.getObjectA(tmp))
1413 {
1414 return 0;
1415 }
1416
1417 cimObjects.append(tmp.getData(), tmp.size());
1418 }
1419
1420 CIMReferencesResponseMessage* msg;
1421 CIMException cimException;
1422
1423 msg = new CIMReferencesResponseMessage(
1424 messageId,
1425 cimException,
1426 QueueIdStack(),
1427 cimObjects);
1428
1429 msg->binaryRequest = true;
1430 mike 1.1 return msg;
1431 }
1432
1433 //==============================================================================
1434 //
1435 // ReferenceNames
1436 //
1437 //==============================================================================
1438
1439 static void _encodeReferenceNamesRequest(
1440 CIMBuffer& buf,
1441 CIMReferenceNamesRequestMessage* msg,
1442 CIMName& name)
1443 {
1444 /* See ../Client/CIMOperationRequestEncoder.cpp */
1445
1446 static const CIMName NAME("ReferenceNames");
1447 name = NAME;
1448
1449 // [HEADER]
1450 Uint32 flags = 0;
1451 mike 1.1
1452 _putHeader(buf, flags, msg->messageId, OP_ReferenceNames);
1453
1454 // [NAMESPACE]
1455 buf.putNamespaceName(msg->nameSpace);
1456
1457 // [OBJECT-NAME]
1458 buf.putObjectPath(msg->objectName);
1459
1460 // [RESULT-CLASS]
1461 buf.putName(msg->resultClass);
1462
1463 // [ROLE]
1464 buf.putString(msg->role);
1465 }
1466
1467 static CIMReferenceNamesRequestMessage* _decodeReferenceNamesRequest(
1468 CIMBuffer& in,
1469 Uint32 queueId,
1470 Uint32 returnQueueId,
1471 Uint32 flags,
1472 mike 1.1 const String& messageId)
1473 {
1474 /* See ../Server/CIMOperationRequestDecoder.cpp */
1475
1476 STAT_GETSTARTTIME
1477
1478 // [NAMESPACE]
1479
1480 CIMNamespaceName nameSpace;
1481
1482 if (!in.getNamespaceName(nameSpace))
1483 return 0;
1484
1485 // [OBJECT-NAME]
1486 CIMObjectPath objectName;
1487
1488 if (!in.getObjectPath(objectName))
1489 return 0;
1490
1491 // [RESULT-CLASS]
1492
1493 mike 1.1 CIMName resultClass;
1494
1495 if (!in.getName(resultClass))
1496 return 0;
1497
1498 // [ROLE]
1499
1500 String role;
1501
1502 if (!in.getString(role))
1503 return 0;
1504
1505 AutoPtr<CIMReferenceNamesRequestMessage> request(
1506 new CIMReferenceNamesRequestMessage(
1507 messageId,
1508 nameSpace,
1509 objectName,
1510 resultClass,
1511 role,
1512 QueueIdStack(queueId, returnQueueId)));
1513
1514 mike 1.1 request->binaryRequest = true;
1515
1516 STAT_SERVERSTART
1517
1518 return request.release();
1519 }
1520
1521 static void _encodeReferenceNamesResponseBody(
1522 CIMBuffer& out,
1523 CIMReferenceNamesResponseMessage* msg,
1524 CIMName& name)
1525 {
1526 /* See ../Server/CIMOperationResponseEncoder.cpp */
1527
1528 static const CIMName NAME("ReferenceNames");
1529 name = NAME;
1530
1531 out.putObjectPathA(msg->objectNames);
1532 }
1533
1534 static CIMReferenceNamesResponseMessage* _decodeReferenceNamesResponse(
1535 mike 1.1 CIMBuffer& in,
1536 Uint32 flags,
1537 const String& messageId)
1538 {
1539 /* See ../Client/CIMOperationResponseDecoder.cpp */
1540
1541 Array<CIMObjectPath> objectNames;
1542
1543 while (in.more())
1544 {
1545 Array<CIMObjectPath> tmp;
1546
1547 if (!in.getObjectPathA(tmp))
1548 return 0;
1549
1550 objectNames.append(tmp.getData(), tmp.size());
1551 }
1552
1553 CIMReferenceNamesResponseMessage* msg;
1554 CIMException cimException;
1555
1556 mike 1.1 msg = new CIMReferenceNamesResponseMessage(
1557 messageId,
1558 cimException,
1559 QueueIdStack(),
1560 objectNames);
1561
1562 msg->binaryRequest = true;
1563 return msg;
1564 }
1565
1566 //==============================================================================
1567 //
1568 // GetClass
1569 //
1570 //==============================================================================
1571
1572 static void _encodeGetClassRequest(
1573 CIMBuffer& buf,
1574 CIMGetClassRequestMessage* msg,
1575 CIMName& name)
1576 {
1577 mike 1.1 /* See ../Client/CIMOperationRequestEncoder.cpp */
1578
1579 static const CIMName NAME("GetClass");
1580 name = NAME;
1581
1582 // [HEADER]
1583
1584 Uint32 flags = 0;
1585
1586 if (msg->localOnly)
1587 flags |= LOCAL_ONLY;
1588
1589 if (msg->includeQualifiers)
1590 flags |= INCLUDE_QUALIFIERS;
1591
1592 if (msg->includeClassOrigin)
1593 flags |= INCLUDE_CLASS_ORIGIN;
1594
1595 _putHeader(buf, flags, msg->messageId, OP_GetClass);
1596
1597 // [NAMESPACE]
1598 mike 1.1 buf.putNamespaceName(msg->nameSpace);
1599
1600 // [CLASSNAME]
1601 buf.putName(msg->className);
1602
1603 // [PROPERTY-LIST]
1604 buf.putPropertyList(msg->propertyList);
1605 }
1606
1607 static CIMGetClassRequestMessage* _decodeGetClassRequest(
1608 CIMBuffer& in,
1609 Uint32 queueId,
1610 Uint32 returnQueueId,
1611 Uint32 flags,
1612 const String& messageId)
1613 {
1614 /* See ../Server/CIMOperationRequestDecoder.cpp */
1615
1616 STAT_GETSTARTTIME
1617
1618 Boolean localOnly = flags & LOCAL_ONLY;
1619 mike 1.1 Boolean includeQualifiers = flags & INCLUDE_QUALIFIERS;
1620 Boolean includeClassOrigin = flags & INCLUDE_CLASS_ORIGIN;
1621
1622 // [NAMESPACE]
1623
1624 CIMNamespaceName nameSpace;
1625
1626 if (!in.getNamespaceName(nameSpace))
1627 return 0;
1628
1629 // [CLASSNAME]
1630 CIMName className;
1631
1632 if (!in.getName(className))
1633 return 0;
1634
1635 // [PROPERTY-LIST]
1636 CIMPropertyList propertyList;
1637 if (!in.getPropertyList(propertyList))
1638 return 0;
1639
1640 mike 1.1 AutoPtr<CIMGetClassRequestMessage> request(new CIMGetClassRequestMessage(
1641 messageId,
1642 nameSpace,
1643 className,
1644 localOnly,
1645 includeQualifiers,
1646 includeClassOrigin,
1647 propertyList,
1648 QueueIdStack(queueId, returnQueueId)));
1649
1650 request->binaryRequest = true;
1651
1652 STAT_SERVERSTART
1653
1654 return request.release();
1655 }
1656
1657 static void _encodeGetClassResponseBody(
1658 CIMBuffer& out,
1659 CIMGetClassResponseMessage* msg,
1660 CIMName& name)
1661 mike 1.1 {
1662 /* See ../Server/CIMOperationResponseEncoder.cpp */
1663
1664 static const CIMName NAME("GetClass");
1665 name = NAME;
1666
1667 out.putClass(msg->cimClass);
1668 }
1669
1670 static CIMGetClassResponseMessage* _decodeGetClassResponse(
1671 CIMBuffer& in,
1672 Uint32 flags,
1673 const String& messageId)
1674 {
1675 /* See ../Client/CIMOperationResponseDecoder.cpp */
1676
1677 CIMClass cimClass;
1678
1679 if (!in.getClass(cimClass))
1680 return 0;
1681
1682 mike 1.1 CIMGetClassResponseMessage* msg;
1683 CIMException cimException;
1684
1685 msg = new CIMGetClassResponseMessage(
1686 messageId,
1687 cimException,
1688 QueueIdStack(),
1689 cimClass);
1690
1691 msg->binaryRequest = true;
1692 return msg;
1693 }
1694
1695 //==============================================================================
1696 //
1697 // EnumerateClasses
1698 //
1699 //==============================================================================
1700
1701 static void _encodeEnumerateClassesRequest(
1702 CIMBuffer& buf,
1703 mike 1.1 CIMEnumerateClassesRequestMessage* msg,
1704 CIMName& name)
1705 {
1706 /* See ../Client/CIMOperationRequestEncoder.cpp */
1707
1708 static const CIMName NAME("EnumerateClasses");
1709 name = NAME;
1710
1711 // [HEADER]
1712
1713 Uint32 flags = 0;
1714
1715 if (msg->localOnly)
1716 flags |= LOCAL_ONLY;
1717
1718 if (msg->deepInheritance)
1719 flags |= DEEP_INHERITANCE;
1720
1721 if (msg->includeQualifiers)
1722 flags |= INCLUDE_QUALIFIERS;
1723
1724 mike 1.1 if (msg->includeClassOrigin)
1725 flags |= INCLUDE_CLASS_ORIGIN;
1726
1727 _putHeader(buf, flags, msg->messageId, OP_EnumerateClasses);
1728
1729 // [NAMESPACE]
1730 buf.putNamespaceName(msg->nameSpace);
1731
1732 // [CLASSNAME]
1733 buf.putName(msg->className);
1734 }
1735
1736 static CIMEnumerateClassesRequestMessage* _decodeEnumerateClassesRequest(
1737 CIMBuffer& in,
1738 Uint32 queueId,
1739 Uint32 returnQueueId,
1740 Uint32 flags,
1741 const String& messageId)
1742 {
1743 /* See ../Server/CIMOperationRequestDecoder.cpp */
1744
1745 mike 1.1 STAT_GETSTARTTIME
1746
1747 Boolean localOnly = flags & LOCAL_ONLY;
1748 Boolean deepInheritance = flags & DEEP_INHERITANCE;
1749 Boolean includeQualifiers = flags & INCLUDE_QUALIFIERS;
1750 Boolean includeClassOrigin = flags & INCLUDE_CLASS_ORIGIN;
1751
1752 // [NAMESPACE]
1753
1754 CIMNamespaceName nameSpace;
1755
1756 if (!in.getNamespaceName(nameSpace))
1757 return 0;
1758
1759 // [CLASSNAME]
1760 CIMName className;
1761
1762 if (!in.getName(className))
1763 return 0;
1764
1765 AutoPtr<CIMEnumerateClassesRequestMessage> request(
1766 mike 1.1 new CIMEnumerateClassesRequestMessage(
1767 messageId,
1768 nameSpace,
1769 className,
1770 deepInheritance,
1771 localOnly,
1772 includeQualifiers,
1773 includeClassOrigin,
1774 QueueIdStack(queueId, returnQueueId)));
1775
1776 request->binaryRequest = true;
1777
1778 STAT_SERVERSTART
1779
1780 return request.release();
1781 }
1782
1783 static void _encodeEnumerateClassesResponseBody(
1784 CIMBuffer& out,
1785 CIMEnumerateClassesResponseMessage* msg,
1786 CIMName& name)
1787 mike 1.1 {
1788 /* See ../Server/CIMOperationResponseEncoder.cpp */
1789
1790 static const CIMName NAME("EnumerateClasses");
1791 name = NAME;
1792
1793 out.putClassA(msg->cimClasses);
1794 }
1795
1796 static CIMEnumerateClassesResponseMessage* _decodeEnumerateClassesResponse(
1797 CIMBuffer& in,
1798 Uint32 flags,
1799 const String& messageId)
1800 {
1801 /* See ../Client/CIMOperationResponseDecoder.cpp */
1802
1803 Array<CIMClass> cimClasses;
1804
1805 while (in.more())
1806 {
1807 Array<CIMClass> tmp;
1808 mike 1.1
1809 if (!in.getClassA(tmp))
1810 return 0;
1811
1812 cimClasses.append(tmp.getData(), tmp.size());
1813 }
1814
1815 CIMEnumerateClassesResponseMessage* msg;
1816 CIMException cimException;
1817
1818 msg = new CIMEnumerateClassesResponseMessage(
1819 messageId,
1820 cimException,
1821 QueueIdStack(),
1822 cimClasses);
1823
1824 msg->binaryRequest = true;
1825 return msg;
1826 }
1827
1828 //==============================================================================
1829 mike 1.1 //
1830 // EnumerateClassNames
1831 //
1832 //==============================================================================
1833
1834 static void _encodeEnumerateClassNamesRequest(
1835 CIMBuffer& buf,
1836 CIMEnumerateClassNamesRequestMessage* msg,
1837 CIMName& name)
1838 {
1839 /* See ../Client/CIMOperationRequestEncoder.cpp */
1840
1841 static const CIMName NAME("EnumerateClassNames");
1842 name = NAME;
1843
1844 // [HEADER]
1845
1846 Uint32 flags = 0;
1847
1848 if (msg->deepInheritance)
1849 flags |= DEEP_INHERITANCE;
1850 mike 1.1
1851 _putHeader(buf, flags, msg->messageId, OP_EnumerateClassNames);
1852
1853 // [NAMESPACE]
1854 buf.putNamespaceName(msg->nameSpace);
1855
1856 // [CLASSNAME]
1857 buf.putName(msg->className);
1858 }
1859
1860 static CIMEnumerateClassNamesRequestMessage* _decodeEnumerateClassNamesRequest(
1861 CIMBuffer& in,
1862 Uint32 queueId,
1863 Uint32 returnQueueId,
1864 Uint32 flags,
1865 const String& messageId)
1866 {
1867 /* See ../Server/CIMOperationRequestDecoder.cpp */
1868
1869 STAT_GETSTARTTIME
1870
1871 mike 1.1 Boolean deepInheritance = flags & DEEP_INHERITANCE;
1872
1873 // [NAMESPACE]
1874
1875 CIMNamespaceName nameSpace;
1876
1877 if (!in.getNamespaceName(nameSpace))
1878 return 0;
1879
1880 // [CLASSNAME]
1881 CIMName className;
1882
1883 if (!in.getName(className))
1884 return 0;
1885
1886 AutoPtr<CIMEnumerateClassNamesRequestMessage> request(
1887 new CIMEnumerateClassNamesRequestMessage(
1888 messageId,
1889 nameSpace,
1890 className,
1891 deepInheritance,
1892 mike 1.1 QueueIdStack(queueId, returnQueueId)));
1893
1894 request->binaryRequest = true;
1895
1896 STAT_SERVERSTART
1897
1898 return request.release();
1899 }
1900
1901 static void _encodeEnumerateClassNamesResponseBody(
1902 CIMBuffer& out,
1903 CIMEnumerateClassNamesResponseMessage* msg,
1904 CIMName& name)
1905 {
1906 /* See ../Server/CIMOperationResponseEncoder.cpp */
1907
1908 static const CIMName NAME("EnumerateClassNames");
1909 name = NAME;
1910
1911 out.putNameA(msg->classNames);
1912 }
1913 mike 1.1
|
1914 kumpf 1.6 static CIMEnumerateClassNamesResponseMessage*
|
1915 mike 1.1 _decodeEnumerateClassNamesResponse(
1916 CIMBuffer& in,
1917 Uint32 flags,
1918 const String& messageId)
1919 {
1920 /* See ../Client/CIMOperationResponseDecoder.cpp */
1921
1922 Array<CIMName> classNames;
1923
1924 while (in.more())
1925 {
1926 Array<CIMName> tmp;
1927
1928 if (!in.getNameA(tmp))
1929 return 0;
1930
1931 classNames.append(tmp.getData(), tmp.size());
1932 }
1933
1934 CIMEnumerateClassNamesResponseMessage* msg;
1935 CIMException cimException;
1936 mike 1.1
1937 msg = new CIMEnumerateClassNamesResponseMessage(
1938 messageId,
1939 cimException,
1940 QueueIdStack(),
1941 classNames);
1942
1943 msg->binaryRequest = true;
1944 return msg;
1945 }
1946
1947 //==============================================================================
1948 //
1949 // CreateClass
1950 //
1951 //==============================================================================
1952
1953 static void _encodeCreateClassRequest(
1954 CIMBuffer& buf,
1955 CIMCreateClassRequestMessage* msg,
1956 CIMName& name)
1957 mike 1.1 {
1958 /* See ../Client/CIMOperationRequestEncoder.cpp */
1959
1960 static const CIMName NAME("CreateClass");
1961 name = NAME;
1962
1963 // [HEADER]
1964 _putHeader(buf, 0, msg->messageId, OP_CreateClass);
1965
1966 // [NAMESPACE]
1967 buf.putNamespaceName(msg->nameSpace);
1968
1969 // [NEW-CLASS]
1970 buf.putClass(msg->newClass);
1971 }
1972
1973 static CIMCreateClassRequestMessage* _decodeCreateClassRequest(
1974 CIMBuffer& in,
1975 Uint32 queueId,
1976 Uint32 returnQueueId,
1977 Uint32 flags,
1978 mike 1.1 const String& messageId)
1979 {
1980 /* See ../Server/CIMOperationRequestDecoder.cpp */
1981
1982 STAT_GETSTARTTIME
1983
1984 // [NAMESPACE]
1985
1986 CIMNamespaceName nameSpace;
1987
1988 if (!in.getNamespaceName(nameSpace))
1989 return 0;
1990
1991 // [NEW-CLASS]
1992 CIMClass newClass;
1993
1994 if (!in.getClass(newClass))
1995 return 0;
1996
1997 AutoPtr<CIMCreateClassRequestMessage> request(
1998 new CIMCreateClassRequestMessage(
1999 mike 1.1 messageId,
2000 nameSpace,
2001 newClass,
2002 QueueIdStack(queueId, returnQueueId)));
2003
2004 request->binaryRequest = true;
2005
2006 STAT_SERVERSTART
2007
2008 return request.release();
2009 }
2010
2011 static void _encodeCreateClassResponseBody(
2012 CIMBuffer& out,
2013 CIMCreateClassResponseMessage* msg,
2014 CIMName& name)
2015 {
2016 /* See ../Server/CIMOperationResponseEncoder.cpp */
2017
2018 static const CIMName NAME("CreateClass");
2019 name = NAME;
2020 mike 1.1 }
2021
2022 static CIMCreateClassResponseMessage* _decodeCreateClassResponse(
2023 CIMBuffer& in,
2024 Uint32 flags,
2025 const String& messageId)
2026 {
2027 /* See ../Client/CIMOperationResponseDecoder.cpp */
2028
2029 CIMCreateClassResponseMessage* msg;
2030 CIMException cimException;
2031
2032 msg = new CIMCreateClassResponseMessage(
2033 messageId,
2034 cimException,
2035 QueueIdStack());
2036
2037 msg->binaryRequest = true;
2038 return msg;
2039 }
2040
2041 mike 1.1 //==============================================================================
2042 //
2043 // DeleteClass
2044 //
2045 //==============================================================================
2046
2047 static void _encodeDeleteClassRequest(
2048 CIMBuffer& buf,
2049 CIMDeleteClassRequestMessage* msg,
2050 CIMName& name)
2051 {
2052 /* See ../Client/CIMOperationRequestEncoder.cpp */
2053
2054 static const CIMName NAME("DeleteClass");
2055 name = NAME;
2056
2057 // [HEADER]
2058 _putHeader(buf, 0, msg->messageId, OP_DeleteClass);
2059
2060 // [NAMESPACE]
2061 buf.putNamespaceName(msg->nameSpace);
2062 mike 1.1
2063 // [CLASSNAME]
2064 buf.putName(msg->className);
2065 }
2066
2067 static CIMDeleteClassRequestMessage* _decodeDeleteClassRequest(
2068 CIMBuffer& in,
2069 Uint32 queueId,
2070 Uint32 returnQueueId,
2071 Uint32 flags,
2072 const String& messageId)
2073 {
2074 /* See ../Server/CIMOperationRequestDecoder.cpp */
2075
2076 STAT_GETSTARTTIME
2077
2078 // [NAMESPACE]
2079
2080 CIMNamespaceName nameSpace;
2081
2082 if (!in.getNamespaceName(nameSpace))
2083 mike 1.1 return 0;
2084
2085 // [CLASSNAME]
2086 CIMName className;
2087
2088 if (!in.getName(className))
2089 return 0;
2090
2091 AutoPtr<CIMDeleteClassRequestMessage> request(
2092 new CIMDeleteClassRequestMessage(
2093 messageId,
2094 nameSpace,
2095 className,
2096 QueueIdStack(queueId, returnQueueId)));
2097
2098 request->binaryRequest = true;
2099
2100 STAT_SERVERSTART
2101
2102 return request.release();
2103 }
2104 mike 1.1
2105 static void _encodeDeleteClassResponseBody(
2106 CIMBuffer& out,
2107 CIMDeleteClassResponseMessage* msg,
2108 CIMName& name)
2109 {
2110 /* See ../Server/CIMOperationResponseEncoder.cpp */
2111
2112 static const CIMName NAME("DeleteClass");
2113 name = NAME;
2114 }
2115
2116 static CIMDeleteClassResponseMessage* _decodeDeleteClassResponse(
2117 CIMBuffer& in,
2118 Uint32 flags,
2119 const String& messageId)
2120 {
2121 /* See ../Client/CIMOperationResponseDecoder.cpp */
2122
2123 CIMDeleteClassResponseMessage* msg;
2124 CIMException cimException;
2125 mike 1.1
2126 msg = new CIMDeleteClassResponseMessage(
2127 messageId,
2128 cimException,
2129 QueueIdStack());
2130
2131 msg->binaryRequest = true;
2132 return msg;
2133 }
2134
2135 //==============================================================================
2136 //
2137 // ModifyClass
2138 //
2139 //==============================================================================
2140
2141 static void _encodeModifyClassRequest(
2142 CIMBuffer& buf,
2143 CIMModifyClassRequestMessage* msg,
2144 CIMName& name)
2145 {
2146 mike 1.1 /* See ../Client/CIMOperationRequestEncoder.cpp */
2147
2148 static const CIMName NAME("ModifyClass");
2149 name = NAME;
2150
2151 // [HEADER]
2152 _putHeader(buf, 0, msg->messageId, OP_ModifyClass);
2153
2154 // [NAMESPACE]
2155 buf.putNamespaceName(msg->nameSpace);
2156
2157 // [NEW-CLASS]
2158 buf.putClass(msg->modifiedClass);
2159 }
2160
2161 static CIMModifyClassRequestMessage* _decodeModifyClassRequest(
2162 CIMBuffer& in,
2163 Uint32 queueId,
2164 Uint32 returnQueueId,
2165 Uint32 flags,
2166 const String& messageId)
2167 mike 1.1 {
2168 /* See ../Server/CIMOperationRequestDecoder.cpp */
2169
2170 STAT_GETSTARTTIME
2171
2172 // [NAMESPACE]
2173
2174 CIMNamespaceName nameSpace;
2175
2176 if (!in.getNamespaceName(nameSpace))
2177 return 0;
2178
2179 // [MODIFIED-CLASS]
2180 CIMClass modifiedClass;
2181
2182 if (!in.getClass(modifiedClass))
2183 return 0;
2184
2185 AutoPtr<CIMModifyClassRequestMessage> request(
2186 new CIMModifyClassRequestMessage(
2187 messageId,
2188 mike 1.1 nameSpace,
2189 modifiedClass,
2190 QueueIdStack(queueId, returnQueueId)));
2191
2192 request->binaryRequest = true;
2193
2194 STAT_SERVERSTART
2195
2196 return request.release();
2197 }
2198
2199 static void _encodeModifyClassResponseBody(
2200 CIMBuffer& out,
2201 CIMModifyClassResponseMessage* msg,
2202 CIMName& name)
2203 {
2204 /* See ../Server/CIMOperationResponseEncoder.cpp */
2205
2206 static const CIMName NAME("ModifyClass");
2207 name = NAME;
2208 }
2209 mike 1.1
2210 static CIMModifyClassResponseMessage* _decodeModifyClassResponse(
2211 CIMBuffer& in,
2212 Uint32 flags,
2213 const String& messageId)
2214 {
2215 /* See ../Client/CIMOperationResponseDecoder.cpp */
2216
2217 CIMModifyClassResponseMessage* msg;
2218 CIMException cimException;
2219
2220 msg = new CIMModifyClassResponseMessage(
2221 messageId,
2222 cimException,
2223 QueueIdStack());
2224
2225 msg->binaryRequest = true;
2226 return msg;
2227 }
2228
2229 //==============================================================================
2230 mike 1.1 //
2231 // SetQualifier
2232 //
2233 //==============================================================================
2234
2235 static void _encodeSetQualifierRequest(
2236 CIMBuffer& buf,
2237 CIMSetQualifierRequestMessage* msg,
2238 CIMName& name)
2239 {
2240 /* See ../Client/CIMOperationRequestEncoder.cpp */
2241
2242 static const CIMName NAME("SetQualifier");
2243 name = NAME;
2244
2245 // [HEADER]
2246 _putHeader(buf, 0, msg->messageId, OP_SetQualifier);
2247
2248 // [NAMESPACE]
2249 buf.putNamespaceName(msg->nameSpace);
2250
2251 mike 1.1 // [QUALIFIER-DECLARATION]
2252 buf.putQualifierDecl(msg->qualifierDeclaration);
2253 }
2254
2255 static CIMSetQualifierRequestMessage* _decodeSetQualifierRequest(
2256 CIMBuffer& in,
2257 Uint32 queueId,
2258 Uint32 returnQueueId,
2259 Uint32 flags,
2260 const String& messageId)
2261 {
2262 /* See ../Server/CIMOperationRequestDecoder.cpp */
2263
2264 STAT_GETSTARTTIME
2265
2266 // [NAMESPACE]
2267
2268 CIMNamespaceName nameSpace;
2269
2270 if (!in.getNamespaceName(nameSpace))
2271 return 0;
2272 mike 1.1
2273 // [QUALIFIER.DECLARATION]
2274
2275 CIMQualifierDecl qualifierDeclaration;
2276
2277 if (!in.getQualifierDecl(qualifierDeclaration))
2278 return 0;
2279
2280 AutoPtr<CIMSetQualifierRequestMessage> request(
2281 new CIMSetQualifierRequestMessage(
2282 messageId,
2283 nameSpace,
2284 qualifierDeclaration,
2285 QueueIdStack(queueId, returnQueueId)));
2286
2287 request->binaryRequest = true;
2288
2289 STAT_SERVERSTART
2290
2291 return request.release();
2292 }
2293 mike 1.1
2294 static void _encodeSetQualifierResponseBody(
2295 CIMBuffer& out,
2296 CIMSetQualifierResponseMessage* msg,
2297 CIMName& name)
2298 {
2299 /* See ../Server/CIMOperationResponseEncoder.cpp */
2300
2301 static const CIMName NAME("SetQualifier");
2302 name = NAME;
2303 }
2304
2305 static CIMSetQualifierResponseMessage* _decodeSetQualifierResponse(
2306 CIMBuffer& in,
2307 Uint32 flags,
2308 const String& messageId)
2309 {
2310 /* See ../Client/CIMOperationResponseDecoder.cpp */
2311
2312 CIMSetQualifierResponseMessage* msg;
2313 CIMException cimException;
2314 mike 1.1
2315 msg = new CIMSetQualifierResponseMessage(
2316 messageId,
2317 cimException,
2318 QueueIdStack());
2319
2320 msg->binaryRequest = true;
2321 return msg;
2322 }
2323
2324 //==============================================================================
2325 //
2326 // GetQualifier
2327 //
2328 //==============================================================================
2329
2330 static void _encodeGetQualifierRequest(
2331 CIMBuffer& buf,
2332 CIMGetQualifierRequestMessage* msg,
2333 CIMName& name)
2334 {
2335 mike 1.1 /* See ../Client/CIMOperationRequestEncoder.cpp */
2336
2337 static const CIMName NAME("GetQualifier");
2338 name = NAME;
2339
2340 // [HEADER]
2341 _putHeader(buf, 0, msg->messageId, OP_GetQualifier);
2342
2343 // [NAMESPACE]
2344 buf.putNamespaceName(msg->nameSpace);
2345
2346 // [QUALIFIER-NAME]
2347 buf.putName(msg->qualifierName);
2348 }
2349
2350 static CIMGetQualifierRequestMessage* _decodeGetQualifierRequest(
2351 CIMBuffer& in,
2352 Uint32 queueId,
2353 Uint32 returnQueueId,
2354 Uint32 flags,
2355 const String& messageId)
2356 mike 1.1 {
2357 /* See ../Server/CIMOperationRequestDecoder.cpp */
2358
2359 STAT_GETSTARTTIME
2360
2361 // [NAMESPACE]
2362
2363 CIMNamespaceName nameSpace;
2364
2365 if (!in.getNamespaceName(nameSpace))
2366 return 0;
2367
2368 // [QUALIFIER-NAME]
2369 CIMName qualifierName;
2370
2371 if (!in.getName(qualifierName))
2372 return 0;
2373
2374 AutoPtr<CIMGetQualifierRequestMessage> request(
2375 new CIMGetQualifierRequestMessage(
2376 messageId,
2377 mike 1.1 nameSpace,
2378 qualifierName,
2379 QueueIdStack(queueId, returnQueueId)));
2380
2381 request->binaryRequest = true;
2382
2383 STAT_SERVERSTART
2384
2385 return request.release();
2386 }
2387
2388 static void _encodeGetQualifierResponseBody(
2389 CIMBuffer& out,
2390 CIMGetQualifierResponseMessage* msg,
2391 CIMName& name)
2392 {
2393 /* See ../Server/CIMOperationResponseEncoder.cpp */
2394
2395 static const CIMName NAME("GetQualifier");
2396 name = NAME;
2397
2398 mike 1.1 out.putQualifierDecl(msg->cimQualifierDecl);
2399 }
2400
2401 static CIMGetQualifierResponseMessage* _decodeGetQualifierResponse(
2402 CIMBuffer& in,
2403 Uint32 flags,
2404 const String& messageId)
2405 {
2406 /* See ../Client/CIMOperationResponseDecoder.cpp */
2407
2408 CIMQualifierDecl cimQualifierDecl;
2409
2410 if (!in.getQualifierDecl(cimQualifierDecl))
2411 return 0;
2412
2413 CIMGetQualifierResponseMessage* msg;
2414 CIMException cimException;
2415
2416 msg = new CIMGetQualifierResponseMessage(
2417 messageId,
2418 cimException,
2419 mike 1.1 QueueIdStack(),
2420 cimQualifierDecl);
2421
2422 msg->binaryRequest = true;
2423 return msg;
2424 }
2425
2426 //==============================================================================
2427 //
2428 // DeleteQualifier
2429 //
2430 //==============================================================================
2431
2432 static void _encodeDeleteQualifierRequest(
2433 CIMBuffer& buf,
2434 CIMDeleteQualifierRequestMessage* msg,
2435 CIMName& name)
2436 {
2437 /* See ../Client/CIMOperationRequestEncoder.cpp */
2438
2439 static const CIMName NAME("DeleteQualifier");
2440 mike 1.1 name = NAME;
2441
2442 // [HEADER]
2443 _putHeader(buf, 0, msg->messageId, OP_DeleteQualifier);
2444
2445 // [NAMESPACE]
2446 buf.putNamespaceName(msg->nameSpace);
2447
2448 // [QUALIFIER-NAME]
2449 buf.putName(msg->qualifierName);
2450 }
2451
2452 static CIMDeleteQualifierRequestMessage* _decodeDeleteQualifierRequest(
2453 CIMBuffer& in,
2454 Uint32 queueId,
2455 Uint32 returnQueueId,
2456 Uint32 flags,
2457 const String& messageId)
2458 {
2459 /* See ../Server/CIMOperationRequestDecoder.cpp */
2460
2461 mike 1.1 STAT_GETSTARTTIME
2462
2463 // [NAMESPACE]
2464
2465 CIMNamespaceName nameSpace;
2466
2467 if (!in.getNamespaceName(nameSpace))
2468 return 0;
2469
2470 // [QUALIFIER-NAME]
2471 CIMName qualifierName;
2472
2473 if (!in.getName(qualifierName))
2474 return 0;
2475
2476 AutoPtr<CIMDeleteQualifierRequestMessage> request(
2477 new CIMDeleteQualifierRequestMessage(
2478 messageId,
2479 nameSpace,
2480 qualifierName,
2481 QueueIdStack(queueId, returnQueueId)));
2482 mike 1.1
2483 request->binaryRequest = true;
2484
2485 STAT_SERVERSTART
2486
2487 return request.release();
2488 }
2489
2490 static void _encodeDeleteQualifierResponseBody(
2491 CIMBuffer& out,
2492 CIMDeleteQualifierResponseMessage* msg,
2493 CIMName& name)
2494 {
2495 /* See ../Server/CIMOperationResponseEncoder.cpp */
2496
2497 static const CIMName NAME("DeleteQualifier");
2498 name = NAME;
2499 }
2500
2501 static CIMDeleteQualifierResponseMessage* _decodeDeleteQualifierResponse(
2502 CIMBuffer& in,
2503 mike 1.1 Uint32 flags,
2504 const String& messageId)
2505 {
2506 /* See ../Client/CIMOperationResponseDecoder.cpp */
2507
2508 CIMDeleteQualifierResponseMessage* msg;
2509 CIMException cimException;
2510
2511 msg = new CIMDeleteQualifierResponseMessage(
2512 messageId,
2513 cimException,
2514 QueueIdStack());
2515
2516 msg->binaryRequest = true;
2517 return msg;
2518 }
2519
2520 //==============================================================================
2521 //
2522 // EnumerateQualifiers
2523 //
2524 mike 1.1 //==============================================================================
2525
2526 static void _encodeEnumerateQualifiersRequest(
2527 CIMBuffer& buf,
2528 CIMEnumerateQualifiersRequestMessage* msg,
2529 CIMName& name)
2530 {
2531 /* See ../Client/CIMOperationRequestEncoder.cpp */
2532
2533 static const CIMName NAME("EnumerateQualifiers");
2534 name = NAME;
2535
2536 // [HEADER]
2537 _putHeader(buf, 0, msg->messageId, OP_EnumerateQualifiers);
2538
2539 // [NAMESPACE]
2540 buf.putNamespaceName(msg->nameSpace);
2541 }
2542
2543 static CIMEnumerateQualifiersRequestMessage* _decodeEnumerateQualifiersRequest(
2544 CIMBuffer& in,
2545 mike 1.1 Uint32 queueId,
2546 Uint32 returnQueueId,
2547 Uint32 flags,
2548 const String& messageId)
2549 {
2550 /* See ../Server/CIMOperationRequestDecoder.cpp */
2551
2552 STAT_GETSTARTTIME
2553
2554 // [NAMESPACE]
2555
2556 CIMNamespaceName nameSpace;
2557
2558 if (!in.getNamespaceName(nameSpace))
2559 return 0;
2560
2561 AutoPtr<CIMEnumerateQualifiersRequestMessage> request(
2562 new CIMEnumerateQualifiersRequestMessage(
2563 messageId,
2564 nameSpace,
2565 QueueIdStack(queueId, returnQueueId)));
2566 mike 1.1
2567 request->binaryRequest = true;
2568
2569 STAT_SERVERSTART
2570
2571 return request.release();
2572 }
2573
2574 static void _encodeEnumerateQualifiersResponseBody(
2575 CIMBuffer& out,
2576 CIMEnumerateQualifiersResponseMessage* msg,
2577 CIMName& name)
2578 {
2579 /* See ../Server/CIMOperationResponseEncoder.cpp */
2580
2581 static const CIMName NAME("EnumerateQualifiers");
2582 name = NAME;
2583
2584 out.putQualifierDeclA(msg->qualifierDeclarations);
2585 }
2586
|
2587 kumpf 1.6 static CIMEnumerateQualifiersResponseMessage*
|
2588 mike 1.1 _decodeEnumerateQualifiersResponse(
2589 CIMBuffer& in,
2590 Uint32 flags,
2591 const String& messageId)
2592 {
2593 /* See ../Client/CIMOperationResponseDecoder.cpp */
2594
2595 Array<CIMQualifierDecl> qualifierDecls;
2596
2597 while (in.more())
2598 {
2599 Array<CIMQualifierDecl> tmp;
2600
2601 if (!in.getQualifierDeclA(tmp))
2602 return 0;
2603
2604 qualifierDecls.append(tmp.getData(), tmp.size());
2605 }
2606
2607 CIMEnumerateQualifiersResponseMessage* msg;
2608 CIMException cimException;
2609 mike 1.1
2610 msg = new CIMEnumerateQualifiersResponseMessage(
2611 messageId,
2612 cimException,
2613 QueueIdStack(),
2614 qualifierDecls);
2615
2616 msg->binaryRequest = true;
2617 return msg;
2618 }
2619
2620 //==============================================================================
2621 //
2622 // GetProperty
2623 //
2624 //==============================================================================
2625
2626 static void _encodeGetPropertyRequest(
2627 CIMBuffer& buf,
2628 CIMGetPropertyRequestMessage* msg,
2629 CIMName& name)
2630 mike 1.1 {
2631 /* See ../Client/CIMOperationRequestEncoder.cpp */
2632
2633 static const CIMName NAME("GetProperty");
2634 name = NAME;
2635
2636 // [HEADER]
2637 _putHeader(buf, 0, msg->messageId, OP_GetProperty);
2638
2639 // [NAMESPACE]
2640 buf.putNamespaceName(msg->nameSpace);
2641
2642 // [INSTANCE-NAME]
2643 buf.putObjectPath(msg->instanceName);
2644
2645 // [PROPERTY-NAME]
2646 buf.putName(msg->propertyName);
2647 }
2648
2649 static CIMGetPropertyRequestMessage* _decodeGetPropertyRequest(
2650 CIMBuffer& in,
2651 mike 1.1 Uint32 queueId,
2652 Uint32 returnQueueId,
2653 Uint32 flags,
2654 const String& messageId)
2655 {
2656 /* See ../Server/CIMOperationRequestDecoder.cpp */
2657
2658 STAT_GETSTARTTIME
2659
2660 // [NAMESPACE]
2661
2662 CIMNamespaceName nameSpace;
2663
2664 if (!in.getNamespaceName(nameSpace))
2665 return 0;
2666
2667 // [INSTANCE-NAME]
2668 CIMObjectPath instanceName;
2669
2670 if (!in.getObjectPath(instanceName))
2671 return 0;
2672 mike 1.1
2673 // [PROPERTY-NAME]
2674 CIMName propertyName;
2675
2676 if (!in.getName(propertyName))
2677 return 0;
2678
2679 AutoPtr<CIMGetPropertyRequestMessage> request(
2680 new CIMGetPropertyRequestMessage(
2681 messageId,
2682 nameSpace,
2683 instanceName,
2684 propertyName,
2685 QueueIdStack(queueId, returnQueueId)));
2686
2687 request->binaryRequest = true;
2688
2689 STAT_SERVERSTART
2690
2691 return request.release();
2692 }
2693 mike 1.1
2694 static void _encodeGetPropertyResponseBody(
2695 CIMBuffer& out,
2696 CIMGetPropertyResponseMessage* msg,
2697 CIMName& name)
2698 {
2699 /* See ../Server/CIMOperationResponseEncoder.cpp */
2700
2701 static const CIMName NAME("GetProperty");
2702 name = NAME;
2703
2704 // [VALUE]
2705 out.putValue(msg->value);
2706 }
2707
2708 static CIMGetPropertyResponseMessage* _decodeGetPropertyResponse(
2709 CIMBuffer& in,
2710 Uint32 flags,
2711 const String& messageId)
2712 {
2713 /* See ../Client/CIMOperationResponseDecoder.cpp */
2714 mike 1.1
2715 // [VALUE]
2716 CIMValue value;
2717
2718 if (!in.getValue(value))
2719 return 0;
2720
2721 // Unfortunately the CIM GetProperty() method is only able to return
2722 // a string since there is no containing element that specifies its
2723 // type. So even though the binary protocol properly transmits the type,
2724 // we are force to convert that type to string to match the XML protocol
2725 // behavior.
2726
2727 if (value.isNull())
2728 value.setNullValue(CIMTYPE_STRING, false);
2729 else
2730 value.set(value.toString());
2731
2732 CIMGetPropertyResponseMessage* msg;
2733 CIMException cimException;
2734
2735 mike 1.1 msg = new CIMGetPropertyResponseMessage(
2736 messageId,
2737 cimException,
2738 QueueIdStack(),
2739 value);
2740
2741 msg->binaryRequest = true;
2742 return msg;
2743 }
2744
2745 //==============================================================================
2746 //
2747 // SetProperty
2748 //
2749 //==============================================================================
2750
2751 static void _encodeSetPropertyRequest(
2752 CIMBuffer& buf,
2753 CIMSetPropertyRequestMessage* msg,
2754 CIMName& name)
2755 {
2756 mike 1.1 /* See ../Client/CIMOperationRequestEncoder.cpp */
2757
2758 static const CIMName NAME("SetProperty");
2759 name = NAME;
2760
2761 // [HEADER]
2762 _putHeader(buf, 0, msg->messageId, OP_SetProperty);
2763
2764 // [NAMESPACE]
2765 buf.putNamespaceName(msg->nameSpace);
2766
2767 // [INSTANCE-NAME]
2768 buf.putObjectPath(msg->instanceName);
2769
2770 // [PROPERTY-NAME]
2771 buf.putName(msg->propertyName);
2772
2773 // [VALUE]
2774 buf.putValue(msg->newValue);
2775 }
2776
2777 mike 1.1 static CIMSetPropertyRequestMessage* _decodeSetPropertyRequest(
2778 CIMBuffer& in,
2779 Uint32 queueId,
2780 Uint32 returnQueueId,
2781 Uint32 flags,
2782 const String& messageId)
2783 {
2784 /* See ../Server/CIMOperationRequestDecoder.cpp */
2785
2786 STAT_GETSTARTTIME
2787
2788 // [NAMESPACE]
2789
2790 CIMNamespaceName nameSpace;
2791
2792 if (!in.getNamespaceName(nameSpace))
2793 return 0;
2794
2795 // [INSTANCE-NAME]
2796
2797 CIMObjectPath instanceName;
2798 mike 1.1
2799 if (!in.getObjectPath(instanceName))
2800 return 0;
2801
2802 // [PROPERTY-NAME]
2803
2804 CIMName propertyName;
2805
2806 if (!in.getName(propertyName))
2807 return 0;
2808
2809 // [PROPERTY-VALUE]
2810
2811 CIMValue propertyValue;
2812
2813 if (!in.getValue(propertyValue))
2814 return 0;
2815
2816 AutoPtr<CIMSetPropertyRequestMessage> request(
2817 new CIMSetPropertyRequestMessage(
2818 messageId,
2819 mike 1.1 nameSpace,
2820 instanceName,
2821 propertyName,
2822 propertyValue,
2823 QueueIdStack(queueId, returnQueueId)));
2824
2825 request->binaryRequest = true;
2826
2827 STAT_SERVERSTART
2828
2829 return request.release();
2830 }
2831
2832 static void _encodeSetPropertyResponseBody(
2833 CIMBuffer& out,
2834 CIMSetPropertyResponseMessage* msg,
2835 CIMName& name)
2836 {
2837 /* See ../Server/CIMOperationResponseEncoder.cpp */
2838
2839 static const CIMName NAME("SetProperty");
2840 mike 1.1 name = NAME;
2841 }
2842
2843 static CIMSetPropertyResponseMessage* _decodeSetPropertyResponse(
2844 CIMBuffer& in,
2845 Uint32 flags,
2846 const String& messageId)
2847 {
2848 /* See ../Client/CIMOperationResponseDecoder.cpp */
2849
2850 CIMSetPropertyResponseMessage* msg;
2851 CIMException cimException;
2852
2853 msg = new CIMSetPropertyResponseMessage(
2854 messageId,
2855 cimException,
2856 QueueIdStack());
2857
2858 msg->binaryRequest = true;
2859 return msg;
2860 }
2861 mike 1.1
2862 //==============================================================================
2863 //
2864 // InvokeMethod
2865 //
2866 //==============================================================================
2867
2868 static void _encodeInvokeMethodRequest(
2869 CIMBuffer& buf,
2870 CIMInvokeMethodRequestMessage* msg,
2871 CIMName& name)
2872 {
2873 /* See ../Client/CIMOperationRequestEncoder.cpp */
2874
2875 name = msg->methodName;
2876
2877 // [HEADER]
2878 _putHeader(buf, 0, msg->messageId, OP_InvokeMethod);
2879
2880 // [NAMESPACE]
2881 buf.putNamespaceName(msg->nameSpace);
2882 mike 1.1
2883 // [INSTANCE-NAME]
2884 buf.putObjectPath(msg->instanceName);
2885
2886 // [METHOD-NAME]
2887 buf.putName(msg->methodName);
2888
2889 // [IN-PARAMETERS]
2890 buf.putParamValueA(msg->inParameters);
2891 }
2892
2893 static CIMInvokeMethodRequestMessage* _decodeInvokeMethodRequest(
2894 CIMBuffer& in,
2895 Uint32 queueId,
2896 Uint32 returnQueueId,
2897 Uint32 flags,
2898 const String& messageId)
2899 {
2900 /* See ../Server/CIMOperationRequestDecoder.cpp */
2901
2902 STAT_GETSTARTTIME
2903 mike 1.1
2904 // [NAMESPACE]
2905
2906 CIMNamespaceName nameSpace;
2907
2908 if (!in.getNamespaceName(nameSpace))
2909 return 0;
2910
2911 // [INSTANCE-NAME]
2912
2913 CIMObjectPath instanceName;
2914
2915 if (!in.getObjectPath(instanceName))
2916 return 0;
2917
2918 // [METHOD-NAME]
2919
2920 CIMName methodName;
2921
2922 if (!in.getName(methodName))
2923 return 0;
2924 mike 1.1
2925 // [IN-PARAMETERS]
2926
2927 Array<CIMParamValue> inParameters;
2928
2929 if (!in.getParamValueA(inParameters))
2930 return 0;
2931
2932 AutoPtr<CIMInvokeMethodRequestMessage> request(
2933 new CIMInvokeMethodRequestMessage(
2934 messageId,
2935 nameSpace,
2936 instanceName,
2937 methodName,
2938 inParameters,
2939 QueueIdStack(queueId, returnQueueId)));
2940
2941 request->binaryRequest = true;
2942
2943 STAT_SERVERSTART
2944
2945 mike 1.1 return request.release();
2946 }
2947
2948 static void _encodeInvokeMethodResponseBody(
2949 CIMBuffer& out,
2950 CIMInvokeMethodResponseMessage* msg,
2951 CIMName& name)
2952 {
2953 /* See ../Server/CIMOperationResponseEncoder.cpp */
2954
2955 name = msg->methodName;
2956
2957 // [METHOD-NAME]
2958 out.putName(msg->methodName);
2959
2960 // [RETURN-VALUE]
2961 out.putValue(msg->retValue);
2962
2963 // [OUT-PARAMETERS]
2964 out.putParamValueA(msg->outParameters);
2965 }
2966 mike 1.1
2967 static CIMInvokeMethodResponseMessage* _decodeInvokeMethodResponse(
2968 CIMBuffer& in,
2969 Uint32 flags,
2970 const String& messageId)
2971 {
2972 /* See ../Client/CIMOperationResponseDecoder.cpp */
2973
2974 // [METHOD-NAME]
2975
2976 CIMName methodName;
2977
2978 if (!in.getName(methodName))
2979 return 0;
2980
2981 // [RETURN-VALUE]
2982
2983 CIMValue returnValue;
2984
2985 if (!in.getValue(returnValue))
2986 return 0;
2987 mike 1.1
2988 // [OUT-PARAMETERS]
2989
2990 Array<CIMParamValue> outParameters;
2991
2992 if (!in.getParamValueA(outParameters))
2993 return 0;
2994
2995 CIMInvokeMethodResponseMessage* msg;
2996 CIMException cimException;
2997
2998 msg = new CIMInvokeMethodResponseMessage(
2999 messageId,
3000 cimException,
3001 QueueIdStack(),
3002 returnValue,
3003 outParameters,
3004 methodName);
3005
3006 msg->binaryRequest = true;
3007
3008 mike 1.1 return msg;
3009 }
3010
3011 //==============================================================================
3012 //
3013 // ExecQuery
3014 //
3015 //==============================================================================
3016
3017 static void _encodeExecQueryRequest(
3018 CIMBuffer& buf,
3019 CIMExecQueryRequestMessage* msg,
3020 CIMName& name)
3021 {
3022 /* See ../Client/CIMOperationRequestEncoder.cpp */
3023
3024 static const CIMName NAME("ExecQuery");
3025 name = NAME;
3026
3027 // [HEADER]
3028 _putHeader(buf, 0, msg->messageId, OP_ExecQuery);
3029 mike 1.1
3030 // [NAMESPACE]
3031 buf.putNamespaceName(msg->nameSpace);
3032
3033 // [QUERY-LANGUAGE]
3034 buf.putString(msg->queryLanguage);
3035
3036 // [QUERY]
3037 buf.putString(msg->query);
3038 }
3039
3040 static CIMExecQueryRequestMessage* _decodeExecQueryRequest(
3041 CIMBuffer& in,
3042 Uint32 queueId,
3043 Uint32 returnQueueId,
3044 Uint32 flags,
3045 const String& messageId)
3046 {
3047 /* See ../Server/CIMOperationRequestDecoder.cpp */
3048
3049 STAT_GETSTARTTIME
3050 mike 1.1
3051 // [NAMESPACE]
3052
3053 CIMNamespaceName nameSpace;
3054
3055 if (!in.getNamespaceName(nameSpace))
3056 return 0;
3057
3058 // [QUERY-LANGUAGE]]
3059 String queryLanguage;
3060
3061 if (!in.getString(queryLanguage))
3062 return 0;
3063
3064 // [QUERY]]
3065 String query;
3066
3067 if (!in.getString(query))
3068 return 0;
3069
3070 AutoPtr<CIMExecQueryRequestMessage> request(
3071 mike 1.1 new CIMExecQueryRequestMessage(
3072 messageId,
3073 nameSpace,
3074 queryLanguage,
3075 query,
3076 QueueIdStack(queueId, returnQueueId)));
3077
3078 request->binaryRequest = true;
3079
3080 STAT_SERVERSTART
3081
3082 return request.release();
3083 }
3084
3085 static void _encodeExecQueryResponseBody(
3086 CIMBuffer& out,
|
3087 r.kieninger 1.8 CIMObjectsResponseData& data,
|
3088 mike 1.1 CIMName& name)
3089 {
3090 /* See ../Server/CIMOperationResponseEncoder.cpp */
3091
3092 static const CIMName NAME("ExecQuery");
3093 name = NAME;
3094
|
3095 r.kieninger 1.8 data.encodeBinaryResponse(out);
|
3096 mike 1.1 }
3097
3098 static CIMExecQueryResponseMessage* _decodeExecQueryResponse(
3099 CIMBuffer& in,
3100 Uint32 flags,
3101 const String& messageId)
3102 {
3103 /* See ../Client/CIMOperationResponseDecoder.cpp */
3104
3105 Array<CIMObject> cimObjects;
3106
3107 while (in.more())
3108 {
3109 Array<CIMObject> tmp;
3110
3111 if (!in.getObjectA(tmp))
3112 return 0;
3113
3114 cimObjects.append(tmp.getData(), tmp.size());
3115 }
3116
3117 mike 1.1 CIMExecQueryResponseMessage* msg;
3118 CIMException cimException;
3119
3120 msg = new CIMExecQueryResponseMessage(
3121 messageId,
3122 cimException,
|
3123 r.kieninger 1.8 QueueIdStack());
|
3124 mike 1.1
|
3125 r.kieninger 1.8 msg->getResponseData().setCIMObjects(cimObjects);
|
3126 mike 1.1 msg->binaryRequest = true;
3127 return msg;
3128 }
3129
3130 //==============================================================================
3131 //
3132 // BinaryCodec::hexDump()
3133 //
3134 //==============================================================================
3135
3136 #if defined(PEGASUS_DEBUG)
3137
3138 void BinaryCodec::hexDump(const void* data, size_t size)
3139 {
3140 unsigned char* p = (unsigned char*)data;
3141 unsigned char buf[16];
3142 size_t n = 0;
3143
3144 for (size_t i = 0, col = 0; i < size; i++)
3145 {
3146 unsigned char c = p[i];
3147 mike 1.1 buf[n++] = c;
3148
3149 if (col == 0)
3150 printf("%06X ", (unsigned int)i);
3151
3152 printf("%02X ", c);
3153
3154 if (col + 1 == sizeof(buf) || i + 1 == size)
3155 {
3156 for (size_t j = col + 1; j < sizeof(buf); j++)
3157 printf(" ");
3158
3159 for (size_t j = 0; j < n; j++)
3160 {
3161 c = buf[j];
3162
3163 if (c >= ' ' && c <= '~')
3164 printf("%c", buf[j]);
3165 else
3166 printf(".");
3167 }
3168 mike 1.1
3169 printf("\n");
3170 n = 0;
3171 }
3172
3173 if (col + 1 == sizeof(buf))
3174 col = 0;
3175 else
3176 col++;
3177 }
3178
3179 printf("\n");
3180 }
3181
3182 #endif /* defined(PEGASUS_DEBUG) */
3183
3184 //==============================================================================
3185 //
3186 // BinaryCodec::decodeRequest()
3187 //
3188 //==============================================================================
3189 mike 1.1
3190 CIMOperationRequestMessage* BinaryCodec::decodeRequest(
3191 const Buffer& in,
3192 Uint32 queueId,
3193 Uint32 returnQueueId)
3194 {
3195 CIMBuffer buf((char*)in.getData(), in.size());
3196 CIMBufferReleaser buf_(buf);
3197
3198 // Turn on validation:
3199 #if defined(ENABLE_VALIDATION)
3200 buf.setValidate(true);
3201 #endif
3202
3203 Uint32 flags;
3204 String messageId;
3205 Operation operation;
3206
3207
3208 if (!_getHeader(buf, flags, messageId, operation))
3209 {
3210 mike 1.1 return 0;
3211 }
3212
3213 switch (operation)
3214 {
3215 case OP_EnumerateInstances:
3216 return _decodeEnumerateInstancesRequest(
3217 buf, queueId, returnQueueId, flags, messageId);
3218 case OP_EnumerateInstanceNames:
3219 return _decodeEnumerateInstanceNamesRequest(
3220 buf, queueId, returnQueueId, flags, messageId);
3221 case OP_GetInstance:
3222 return _decodeGetInstanceRequest(
3223 buf, queueId, returnQueueId, flags, messageId);
3224 case OP_CreateInstance:
3225 return _decodeCreateInstanceRequest(
3226 buf, queueId, returnQueueId, flags, messageId);
3227 case OP_ModifyInstance:
3228 return _decodeModifyInstanceRequest(
3229 buf, queueId, returnQueueId, flags, messageId);
3230 case OP_DeleteInstance:
3231 mike 1.1 return _decodeDeleteInstanceRequest(
3232 buf, queueId, returnQueueId, flags, messageId);
3233 case OP_Associators:
3234 return _decodeAssociatorsRequest(
3235 buf, queueId, returnQueueId, flags, messageId);
3236 case OP_AssociatorNames:
3237 return _decodeAssociatorNamesRequest(
3238 buf, queueId, returnQueueId, flags, messageId);
3239 case OP_References:
3240 return _decodeReferencesRequest(
3241 buf, queueId, returnQueueId, flags, messageId);
3242 case OP_ReferenceNames:
3243 return _decodeReferenceNamesRequest(
3244 buf, queueId, returnQueueId, flags, messageId);
3245 case OP_GetClass:
3246 return _decodeGetClassRequest(
3247 buf, queueId, returnQueueId, flags, messageId);
3248 case OP_EnumerateClasses:
3249 return _decodeEnumerateClassesRequest(
3250 buf, queueId, returnQueueId, flags, messageId);
3251 case OP_EnumerateClassNames:
3252 mike 1.1 return _decodeEnumerateClassNamesRequest(
3253 buf, queueId, returnQueueId, flags, messageId);
3254 case OP_CreateClass:
3255 return _decodeCreateClassRequest(
3256 buf, queueId, returnQueueId, flags, messageId);
3257 case OP_DeleteClass:
3258 return _decodeDeleteClassRequest(
3259 buf, queueId, returnQueueId, flags, messageId);
3260 case OP_ModifyClass:
3261 return _decodeModifyClassRequest(
3262 buf, queueId, returnQueueId, flags, messageId);
3263 case OP_SetQualifier:
3264 return _decodeSetQualifierRequest(
3265 buf, queueId, returnQueueId, flags, messageId);
3266 case OP_GetQualifier:
3267 return _decodeGetQualifierRequest(
3268 buf, queueId, returnQueueId, flags, messageId);
3269 case OP_DeleteQualifier:
3270 return _decodeDeleteQualifierRequest(
3271 buf, queueId, returnQueueId, flags, messageId);
3272 case OP_EnumerateQualifiers:
3273 mike 1.1 return _decodeEnumerateQualifiersRequest(
3274 buf, queueId, returnQueueId, flags, messageId);
3275 case OP_GetProperty:
3276 return _decodeGetPropertyRequest(
3277 buf, queueId, returnQueueId, flags, messageId);
3278 case OP_SetProperty:
3279 return _decodeSetPropertyRequest(
3280 buf, queueId, returnQueueId, flags, messageId);
3281 case OP_InvokeMethod:
3282 return _decodeInvokeMethodRequest(
3283 buf, queueId, returnQueueId, flags, messageId);
3284 case OP_ExecQuery:
3285 return _decodeExecQueryRequest(
3286 buf, queueId, returnQueueId, flags, messageId);
3287 default:
3288 // Unexpected message type
3289 PEGASUS_ASSERT(0);
3290 return 0;
3291 }
3292 }
3293
3294 mike 1.1 //==============================================================================
3295 //
3296 // BinaryCodec::decodeResponse()
3297 //
3298 //==============================================================================
3299
3300 CIMResponseMessage* BinaryCodec::decodeResponse(
3301 const Buffer& in)
3302 {
3303 CIMBuffer buf((char*)in.getData(), in.size());
3304 CIMBufferReleaser buf_(buf);
3305
3306 // Turn on validation:
3307 #if defined(ENABLE_VALIDATION)
3308 buf.setValidate(true);
3309 #endif
3310
3311 Uint32 flags;
3312 String messageId;
3313 Operation operation;
3314
3315 mike 1.1 if (!_getHeader(buf, flags, messageId, operation))
3316 {
3317 throw CIMException(CIM_ERR_FAILED, "Corrupt binary message header");
3318 return 0;
3319 }
3320
3321 CIMResponseMessage* msg = 0;
3322
3323 switch (operation)
3324 {
3325 case OP_EnumerateInstances:
3326 msg = _decodeEnumerateInstancesResponse(buf, flags, messageId);
3327 break;
3328 case OP_EnumerateInstanceNames:
3329 msg = _decodeEnumerateInstanceNamesResponse(buf, flags, messageId);
3330 break;
3331 case OP_GetInstance:
3332 msg = _decodeGetInstanceResponse(buf, flags, messageId);
3333 break;
3334 case OP_CreateInstance:
3335 msg = _decodeCreateInstanceResponse(buf, flags, messageId);
3336 mike 1.1 break;
3337 case OP_ModifyInstance:
3338 msg = _decodeModifyInstanceResponse(buf, flags, messageId);
3339 break;
3340 case OP_DeleteInstance:
3341 msg = _decodeDeleteInstanceResponse(buf, flags, messageId);
3342 break;
3343 case OP_Associators:
3344 msg = _decodeAssociatorsResponse(buf, flags, messageId);
3345 break;
3346 case OP_AssociatorNames:
3347 msg = _decodeAssociatorNamesResponse(buf, flags, messageId);
3348 break;
3349 case OP_References:
3350 msg = _decodeReferencesResponse(buf, flags, messageId);
3351 break;
3352 case OP_ReferenceNames:
3353 msg = _decodeReferenceNamesResponse(buf, flags, messageId);
3354 break;
3355 case OP_GetClass:
3356 msg = _decodeGetClassResponse(buf, flags, messageId);
3357 mike 1.1 break;
3358 case OP_EnumerateClasses:
3359 msg = _decodeEnumerateClassesResponse(buf, flags, messageId);
3360 break;
3361 case OP_EnumerateClassNames:
3362 msg = _decodeEnumerateClassNamesResponse(buf, flags, messageId);
3363 break;
3364 case OP_CreateClass:
3365 msg = _decodeCreateClassResponse(buf, flags, messageId);
3366 break;
3367 case OP_DeleteClass:
3368 msg = _decodeDeleteClassResponse(buf, flags, messageId);
3369 break;
3370 case OP_ModifyClass:
3371 msg = _decodeModifyClassResponse(buf, flags, messageId);
3372 break;
3373 case OP_SetQualifier:
3374 msg = _decodeSetQualifierResponse(buf, flags, messageId);
3375 break;
3376 case OP_GetQualifier:
3377 msg = _decodeGetQualifierResponse(buf, flags, messageId);
3378 mike 1.1 break;
3379 case OP_DeleteQualifier:
3380 msg = _decodeDeleteQualifierResponse(buf, flags, messageId);
3381 break;
3382 case OP_EnumerateQualifiers:
3383 msg = _decodeEnumerateQualifiersResponse(buf, flags, messageId);
3384 break;
3385 case OP_GetProperty:
3386 msg = _decodeGetPropertyResponse(buf, flags, messageId);
3387 break;
3388 case OP_SetProperty:
3389 msg = _decodeSetPropertyResponse(buf, flags, messageId);
3390 break;
3391 case OP_InvokeMethod:
3392 msg = _decodeInvokeMethodResponse(buf, flags, messageId);
3393 break;
3394 case OP_ExecQuery:
3395 msg = _decodeExecQueryResponse(buf, flags, messageId);
3396 break;
3397 default:
3398 // Unexpected message type
3399 mike 1.1 PEGASUS_ASSERT(0);
3400 break;
3401 }
3402
3403 if (!msg)
3404 throw CIMException(CIM_ERR_FAILED, "Received corrupted binary message");
3405
3406 return msg;
3407 }
3408
3409 //==============================================================================
3410 //
3411 // BinaryCodec::formatSimpleIMethodRspMessage()
3412 //
3413 //==============================================================================
3414
3415 Buffer BinaryCodec::formatSimpleIMethodRspMessage(
3416 const CIMName& iMethodName,
3417 const String& messageId,
3418 HttpMethod httpMethod,
3419 const ContentLanguageList& httpContentLanguages,
3420 mike 1.1 const Buffer& body,
3421 Uint64 serverResponseTime,
3422 Boolean isFirst,
3423 Boolean isLast)
3424 {
3425 Buffer out;
3426
3427 if (isFirst == true)
3428 {
3429 // Write HTTP header:
|
3430 kumpf 1.6 XmlWriter::appendMethodResponseHeader(out, httpMethod,
|
3431 mike 1.1 httpContentLanguages, 0, serverResponseTime, true);
3432
3433 // Binary message header:
3434 CIMBuffer cb(128);
3435 _putHeader(cb, 0, messageId, _NameToOp(iMethodName));
3436 out.append(cb.getData(), cb.size());
3437 }
3438
3439 if (body.size() != 0)
3440 {
3441 out.append(body.getData(), body.size());
3442 }
3443
3444 return out;
3445 }
3446
3447 //==============================================================================
3448 //
3449 // BinaryCodec::encodeRequest()
3450 //
3451 //==============================================================================
3452 mike 1.1
3453 bool BinaryCodec::encodeRequest(
3454 Buffer& out,
3455 const char* host,
3456 const String& authHeader,
3457 CIMOperationRequestMessage* msg,
3458 bool binaryResponse)
3459 {
3460 CIMBuffer buf;
3461 CIMName name;
3462
3463 switch (msg->getType())
3464 {
3465 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
3466 {
3467 _encodeEnumerateInstancesRequest(buf,
3468 (CIMEnumerateInstancesRequestMessage*)msg, name);
3469 break;
3470 }
3471
3472 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
3473 mike 1.1 {
3474 _encodeEnumerateInstanceNamesRequest(buf,
3475 (CIMEnumerateInstanceNamesRequestMessage*)msg, name);
3476 break;
3477 }
3478
3479 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
3480 {
3481 _encodeGetInstanceRequest(buf,
3482 (CIMGetInstanceRequestMessage*)msg, name);
3483 break;
3484 }
3485
3486 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
3487 {
3488 _encodeCreateInstanceRequest(buf,
3489 (CIMCreateInstanceRequestMessage*)msg, name);
3490 break;
3491 }
3492
3493 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
3494 mike 1.1 {
3495 _encodeModifyInstanceRequest(buf,
3496 (CIMModifyInstanceRequestMessage*)msg, name);
3497 break;
3498 }
3499
3500 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
3501 {
3502 _encodeDeleteInstanceRequest(buf,
3503 (CIMDeleteInstanceRequestMessage*)msg, name);
3504 break;
3505 }
3506
3507 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
3508 {
3509 _encodeAssociatorsRequest(buf,
3510 (CIMAssociatorsRequestMessage*)msg, name);
3511 break;
3512 }
3513
3514 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
3515 mike 1.1 {
3516 _encodeAssociatorNamesRequest(buf,
3517 (CIMAssociatorNamesRequestMessage*)msg, name);
3518 break;
3519 }
3520
3521 case CIM_REFERENCES_REQUEST_MESSAGE:
3522 {
3523 _encodeReferencesRequest(buf,
3524 (CIMReferencesRequestMessage*)msg, name);
3525 break;
3526 }
3527
3528 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
3529 {
3530 _encodeReferenceNamesRequest(buf,
3531 (CIMReferenceNamesRequestMessage*)msg, name);
3532 break;
3533 }
3534
3535 case CIM_GET_CLASS_REQUEST_MESSAGE:
3536 mike 1.1 {
3537 _encodeGetClassRequest(buf,
3538 (CIMGetClassRequestMessage*)msg, name);
3539 break;
3540 }
3541
3542 case CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE:
3543 {
3544 _encodeEnumerateClassesRequest(buf,
3545 (CIMEnumerateClassesRequestMessage*)msg, name);
3546 break;
3547 }
3548
3549 case CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE:
3550 {
3551 _encodeEnumerateClassNamesRequest(buf,
3552 (CIMEnumerateClassNamesRequestMessage*)msg, name);
3553 break;
3554 }
3555
3556 case CIM_CREATE_CLASS_REQUEST_MESSAGE:
3557 mike 1.1 {
3558 _encodeCreateClassRequest(buf,
3559 (CIMCreateClassRequestMessage*)msg, name);
3560 break;
3561 }
3562
3563 case CIM_DELETE_CLASS_REQUEST_MESSAGE:
3564 {
3565 _encodeDeleteClassRequest(buf,
3566 (CIMDeleteClassRequestMessage*)msg, name);
3567 break;
3568 }
3569
3570 case CIM_MODIFY_CLASS_REQUEST_MESSAGE:
3571 {
3572 _encodeModifyClassRequest(buf,
3573 (CIMModifyClassRequestMessage*)msg, name);
3574 break;
3575 }
3576
3577 case CIM_SET_QUALIFIER_REQUEST_MESSAGE:
3578 mike 1.1 {
3579 _encodeSetQualifierRequest(buf,
3580 (CIMSetQualifierRequestMessage*)msg, name);
3581 break;
3582 }
3583
3584 case CIM_GET_QUALIFIER_REQUEST_MESSAGE:
3585 {
3586 _encodeGetQualifierRequest(buf,
3587 (CIMGetQualifierRequestMessage*)msg, name);
3588 break;
3589 }
3590
3591 case CIM_DELETE_QUALIFIER_REQUEST_MESSAGE:
3592 {
3593 _encodeDeleteQualifierRequest(buf,
3594 (CIMDeleteQualifierRequestMessage*)msg, name);
3595 break;
3596 }
3597
3598 case CIM_ENUMERATE_QUALIFIERS_REQUEST_MESSAGE:
3599 mike 1.1 {
3600 _encodeEnumerateQualifiersRequest(buf,
3601 (CIMEnumerateQualifiersRequestMessage*)msg, name);
3602 break;
3603 }
3604
3605 case CIM_GET_PROPERTY_REQUEST_MESSAGE:
3606 {
3607 _encodeGetPropertyRequest(buf,
3608 (CIMGetPropertyRequestMessage*)msg, name);
3609 break;
3610 }
3611
3612 case CIM_SET_PROPERTY_REQUEST_MESSAGE:
3613 {
3614 _encodeSetPropertyRequest(buf,
3615 (CIMSetPropertyRequestMessage*)msg, name);
3616 break;
3617 }
3618
3619 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
3620 mike 1.1 {
3621 _encodeInvokeMethodRequest(buf,
3622 (CIMInvokeMethodRequestMessage*)msg, name);
3623 break;
3624 }
3625
3626 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
3627 {
3628 _encodeExecQueryRequest(buf,
3629 (CIMExecQueryRequestMessage*)msg, name);
3630 break;
3631 }
3632
3633 default:
3634 // Unexpected message type
3635 PEGASUS_ASSERT(0);
3636 return false;
3637 }
3638
3639 // [HTTP-HEADERS]
3640 XmlWriter::appendMethodCallHeader(
3641 mike 1.1 out,
3642 host,
3643 name,
3644 msg->nameSpace.getString(),
3645 authHeader,
3646 msg->getHttpMethod(),
3647 AcceptLanguageListContainer(msg->operationContext.get(
3648 AcceptLanguageListContainer::NAME)).getLanguages(),
3649 ContentLanguageListContainer(msg->operationContext.get(
3650 ContentLanguageListContainer::NAME)).getLanguages(),
|
3651 kumpf 1.6 buf.size(),
|
3652 mike 1.1 true, /* binaryRequest */
3653 binaryResponse);
3654
3655 out.append(buf.getData(), buf.size());
3656
3657 return true;
3658 }
3659
3660 //==============================================================================
3661 //
3662 // BinaryCodec::encodeResponseBody()
3663 //
3664 //==============================================================================
3665
3666 bool BinaryCodec::encodeResponseBody(
3667 Buffer& out,
3668 const CIMResponseMessage* msg,
3669 CIMName& name)
3670 {
3671 CIMBuffer buf;
3672
3673 mike 1.1 switch (msg->getType())
3674 {
3675 case CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE:
3676 {
|
3677 r.kieninger 1.8 _encodeEnumerateInstancesResponseBody(
3678 buf,
3679 ((CIMEnumerateInstancesResponseMessage*)msg)->getResponseData(),
3680 name);
|
3681 mike 1.1 break;
3682 }
3683
3684 case CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE:
3685 {
3686 _encodeEnumerateInstanceNamesResponseBody(buf,
3687 (CIMEnumerateInstanceNamesResponseMessage*)msg, name);
3688 break;
3689 }
3690
3691 case CIM_GET_INSTANCE_RESPONSE_MESSAGE:
3692 {
|
3693 r.kieninger 1.8 _encodeGetInstanceResponseBody(
3694 buf,
3695 ((CIMGetInstanceResponseMessage*)msg)->getResponseData(),
3696 name);
|
3697 mike 1.1 break;
3698 }
3699
3700 case CIM_CREATE_INSTANCE_RESPONSE_MESSAGE:
3701 {
3702 _encodeCreateInstanceResponseBody(buf,
3703 (CIMCreateInstanceResponseMessage*)msg, name);
3704 break;
3705 }
3706
3707 case CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE:
3708 {
3709 _encodeModifyInstanceResponseBody(buf,
3710 (CIMModifyInstanceResponseMessage*)msg, name);
3711 break;
3712 }
3713
3714 case CIM_DELETE_INSTANCE_RESPONSE_MESSAGE:
3715 {
3716 _encodeDeleteInstanceResponseBody(buf,
3717 (CIMDeleteInstanceResponseMessage*)msg, name);
3718 mike 1.1 break;
3719 }
3720
3721 case CIM_ASSOCIATORS_RESPONSE_MESSAGE:
3722 {
|
3723 r.kieninger 1.8 _encodeAssociatorsResponseBody(
3724 buf,
3725 ((CIMAssociatorsResponseMessage*)msg)->getResponseData(),
3726 name);
|
3727 mike 1.1 break;
3728 }
3729
3730 case CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE:
3731 {
3732 _encodeAssociatorNamesResponseBody(buf,
3733 (CIMAssociatorNamesResponseMessage*)msg, name);
3734 break;
3735 }
3736
3737 case CIM_REFERENCES_RESPONSE_MESSAGE:
3738 {
3739 _encodeReferencesResponseBody(buf,
3740 (CIMReferencesResponseMessage*)msg, name);
3741 break;
3742 }
3743
3744 case CIM_REFERENCE_NAMES_RESPONSE_MESSAGE:
3745 {
3746 _encodeReferenceNamesResponseBody(buf,
3747 (CIMReferenceNamesResponseMessage*)msg, name);
3748 mike 1.1 break;
3749 }
3750
3751 case CIM_GET_CLASS_RESPONSE_MESSAGE:
3752 {
3753 _encodeGetClassResponseBody(buf,
3754 (CIMGetClassResponseMessage*)msg, name);
3755 break;
3756 }
3757
3758 case CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE:
3759 {
3760 _encodeEnumerateClassesResponseBody(buf,
3761 (CIMEnumerateClassesResponseMessage*)msg, name);
3762 break;
3763 }
3764
3765 case CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE:
3766 {
3767 _encodeEnumerateClassNamesResponseBody(buf,
3768 (CIMEnumerateClassNamesResponseMessage*)msg, name);
3769 mike 1.1 break;
3770 }
3771
3772 case CIM_CREATE_CLASS_RESPONSE_MESSAGE:
3773 {
3774 _encodeCreateClassResponseBody(buf,
3775 (CIMCreateClassResponseMessage*)msg, name);
3776 break;
3777 }
3778
3779 case CIM_DELETE_CLASS_RESPONSE_MESSAGE:
3780 {
3781 _encodeDeleteClassResponseBody(buf,
3782 (CIMDeleteClassResponseMessage*)msg, name);
3783 break;
3784 }
3785
3786 case CIM_MODIFY_CLASS_RESPONSE_MESSAGE:
3787 {
3788 _encodeModifyClassResponseBody(buf,
3789 (CIMModifyClassResponseMessage*)msg, name);
3790 mike 1.1 break;
3791 }
3792
3793 case CIM_SET_QUALIFIER_RESPONSE_MESSAGE:
3794 {
3795 _encodeSetQualifierResponseBody(buf,
3796 (CIMSetQualifierResponseMessage*)msg, name);
3797 break;
3798 }
3799
3800 case CIM_GET_QUALIFIER_RESPONSE_MESSAGE:
3801 {
3802 _encodeGetQualifierResponseBody(buf,
3803 (CIMGetQualifierResponseMessage*)msg, name);
3804 break;
3805 }
3806
3807 case CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE:
3808 {
3809 _encodeDeleteQualifierResponseBody(buf,
3810 (CIMDeleteQualifierResponseMessage*)msg, name);
3811 mike 1.1 break;
3812 }
3813
3814 case CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE:
3815 {
3816 _encodeEnumerateQualifiersResponseBody(buf,
3817 (CIMEnumerateQualifiersResponseMessage*)msg, name);
3818 break;
3819 }
3820
3821 case CIM_GET_PROPERTY_RESPONSE_MESSAGE:
3822 {
3823 _encodeGetPropertyResponseBody(buf,
3824 (CIMGetPropertyResponseMessage*)msg, name);
3825 break;
3826 }
3827
3828 case CIM_SET_PROPERTY_RESPONSE_MESSAGE:
3829 {
3830 _encodeSetPropertyResponseBody(buf,
3831 (CIMSetPropertyResponseMessage*)msg, name);
3832 mike 1.1 break;
3833 }
3834
3835 case CIM_INVOKE_METHOD_RESPONSE_MESSAGE:
3836 {
3837 _encodeInvokeMethodResponseBody(buf,
3838 (CIMInvokeMethodResponseMessage*)msg, name);
3839 break;
3840 }
3841
3842 case CIM_EXEC_QUERY_RESPONSE_MESSAGE:
3843 {
|
3844 r.kieninger 1.8 _encodeExecQueryResponseBody(
3845 buf,
3846 ((CIMExecQueryResponseMessage*)msg)->getResponseData(),
3847 name);
|
3848 mike 1.1 break;
3849 }
3850
3851 default:
3852 // Unexpected message type
3853 PEGASUS_ASSERT(0);
3854 return false;
3855 }
3856
3857 out.append(buf.getData(), buf.size());
3858 return true;
3859 }
3860
3861 PEGASUS_NAMESPACE_END
|