1 karl 1.15 //%2005////////////////////////////////////////////////////////////////////////
|
2 schuur 1.1 //
|
3 karl 1.12 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
6 schuur 1.1 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.12 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.15 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 schuur 1.1 //
12 // Permission is hereby granted, free of charge, to any person obtaining a copy
13 // of this software and associated documentation files (the "Software"), to
14 // deal in the Software without restriction, including without limitation the
15 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16 // sell copies of the Software, and to permit persons to whom the Software is
17 // furnished to do so, subject to the following conditions:
|
18 r.kieninger 1.16 //
|
19 schuur 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
20 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
21 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
22 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
23 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 //==============================================================================
29 //
30 // Author: Adrian Schuur, schuur@de.ibm.com
31 //
|
32 r.kieninger 1.16 // Modified By: Robert Kieninger, kieningr@de.ibm.com, for bug#2642
|
33 schuur 1.1 //
34 //%/////////////////////////////////////////////////////////////////////////////
35
|
36 schuur 1.6 #include "CMPI_Version.h"
|
37 schuur 1.3
|
38 schuur 1.1 #include "CMPI_Broker.h"
39 #include "CMPI_Object.h"
40 #include "CMPI_ContextArgs.h"
41 #include "CMPI_Enumeration.h"
42 #include "CMPI_Value.h"
43 #include "CMPIProviderManager.h"
|
44 schuur 1.9 #include "CMPI_String.h"
|
45 schuur 1.1
46 #include <Pegasus/Common/CIMName.h>
47 #include <Pegasus/Common/CIMPropertyList.h>
48 #include <Pegasus/Provider/CIMOMHandle.h>
49 #include <Pegasus/Common/CIMValue.h>
50 #include <Pegasus/Common/CIMType.h>
51
52
53 PEGASUS_USING_STD;
54 PEGASUS_NAMESPACE_BEGIN
55
56 #define DDD(X) if (_cmpi_trace) X;
57
58 extern int _cmpi_trace;
59
|
60 konrad.r 1.20 static CIMPropertyList getList(const char** l) {
|
61 schuur 1.10 CIMPropertyList pl;
62 if (l) {
63 Array<CIMName> n;
64 while (*l) {
65 n.append(*l++);
66 }
67 pl.set(n);
68 }
69 return pl;
|
70 schuur 1.1 }
71
|
72 konrad.r 1.20 CIMClass* mbGetClass(const CMPIBroker *mb, const CIMObjectPath &cop) {
|
73 schuur 1.4 DDD(cout<<"--- mbGetClass()"<<endl);
|
74 schuur 1.10 mb=CM_BROKER;
|
75 schuur 1.1 CMPI_Broker *xBroker=(CMPI_Broker*)mb;
|
76 schuur 1.3 String clsId=cop.getNameSpace().getString()+":"+cop.getClassName().getString();
|
77 schuur 1.1 CIMClass *ccp;
78
|
79 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
80 schuur 1.1 if (xBroker->clsCache) {
81 if (xBroker->clsCache->lookup(clsId,ccp)) return ccp;
82 }
83 else xBroker->clsCache=new ClassCache();
84
85 try {
86 CIMClass cc=CM_CIMOM(mb)->getClass(
87 OperationContext(),
88 cop.getNameSpace(),
89 cop.getClassName(),
90 (bool)0,
91 (bool)1,
92 (bool)0,
93 CIMPropertyList());
94 ccp=new CIMClass(cc);
95 xBroker->clsCache->insert(clsId,ccp);
96 return ccp;
97 }
|
98 konrad.r 1.20 catch (const CIMException &e) {
|
99 schuur 1.4 DDD(cout<<"### exception: mbGetClass - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
100 schuur 1.1 }
101 return NULL;
102 }
103
|
104 schuur 1.11 extern "C" {
|
105 schuur 1.1
|
106 konrad.r 1.20 static CMPIInstance* mbGetInstance(const CMPIBroker *mb, const CMPIContext *ctx,
107 const CMPIObjectPath *cop, const char **properties, CMPIStatus *rc) {
|
108 schuur 1.11 DDD(cout<<"--- mbGetInstance()"<<endl);
109 mb=CM_BROKER;
110 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
|
111 konrad.r 1.20 const CIMPropertyList props=getList(properties);
|
112 schuur 1.11 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
113 CM_ObjectPath(cop)->getClassName(),
114 CM_ObjectPath(cop)->getKeyBindings());
115
116 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
117 try {
118 CIMInstance ci=CM_CIMOM(mb)->getInstance(
119 OperationContext(*CM_Context(ctx)),
120 CM_ObjectPath(cop)->getNameSpace(),
121 qop, //*CM_ObjectPath(cop),
122 CM_LocalOnly(flgs),
123 CM_IncludeQualifiers(flgs),
124 CM_ClassOrigin(flgs),
125 props);
|
126 r.kieninger 1.18 ci.setPath(*CM_ObjectPath(cop));
|
127 schuur 1.11 if (rc) CMSetStatus(rc,CMPI_RC_OK);
128 return (CMPIInstance*)new CMPI_Object(new CIMInstance(ci));
129 }
|
130 konrad.r 1.20 catch (const CIMException &e) {
|
131 schuur 1.11 DDD(cout<<"### exception: mbGetInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
132 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
133 (CMPIString*)string2CMPIString(e.getMessage()));
134 return NULL;
135 }
136 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-0");
137 return NULL;
|
138 schuur 1.1 }
|
139 schuur 1.11
|
140 konrad.r 1.20 static CMPIObjectPath* mbCreateInstance(const CMPIBroker *mb, const CMPIContext *ctx,
141 const CMPIObjectPath *cop, const CMPIInstance *ci, CMPIStatus *rc) {
|
142 schuur 1.11 DDD(cout<<"--- mbCreateInstance()"<<endl);
143 mb=CM_BROKER;
144
145 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
146 try {
147 CIMObjectPath ncop=CM_CIMOM(mb)->createInstance(
148 OperationContext(*CM_Context(ctx)),
149 CM_ObjectPath(cop)->getNameSpace(),
150 *CM_Instance(ci));
151 if (rc) CMSetStatus(rc,CMPI_RC_OK);
152 return (CMPIObjectPath*)new CMPI_Object(new CIMObjectPath(ncop));
153 }
|
154 konrad.r 1.20 catch (const CIMException &e) {
|
155 schuur 1.11 DDD(cout<<"### exception: mbCreateInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
156 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
157 (CMPIString*)string2CMPIString(e.getMessage()));
158 return NULL;
159 }
160 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-1");
|
161 schuur 1.9 return NULL;
|
162 schuur 1.1 }
163
|
164 konrad.r 1.20 static CMPIStatus mbModifyInstance(const CMPIBroker *mb, const CMPIContext *ctx,
165 const CMPIObjectPath *cop, const CMPIInstance *ci,const char ** properties) {
|
166 schuur 1.11 DDD(cout<<"--- mbSetInstance()"<<endl);
167 mb=CM_BROKER;
168 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
|
169 konrad.r 1.20 const CIMPropertyList props=getList(properties);
|
170 schuur 1.11
171 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
172 try {
|
173 marek 1.14 CIMInstance cmi(*CM_Instance(ci));
174 cmi.setPath(*CM_ObjectPath(cop));
|
175 schuur 1.11 CM_CIMOM(mb)->modifyInstance(
176 OperationContext(*CM_Context(ctx)),
|
177 marek 1.14 CM_ObjectPath(cop)->getNameSpace(),
178 cmi,
|
179 schuur 1.11 CM_IncludeQualifiers(flgs),
180 props);
181 CMReturn(CMPI_RC_OK);
182 }
|
183 konrad.r 1.20 catch (const CIMException &e) {
|
184 schuur 1.11 DDD(cout<<"### exception: mbSetInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
185 CMReturnWithString((CMPIrc)e.getCode(),
186 (CMPIString*)string2CMPIString(e.getMessage()));
187 }
188 CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-2");
|
189 schuur 1.1 }
190
|
191 konrad.r 1.20 static CMPIStatus mbDeleteInstance (const CMPIBroker *mb, const CMPIContext *ctx,
192 const CMPIObjectPath *cop) {
|
193 schuur 1.11 DDD(cout<<"--- mbDeleteInstance()"<<endl);
194 mb=CM_BROKER;
195 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
196 CM_ObjectPath(cop)->getClassName(),
197 CM_ObjectPath(cop)->getKeyBindings());
198
199 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
200 try {
201 CM_CIMOM(mb)->deleteInstance(
202 OperationContext(*CM_Context(ctx)),
203 CM_ObjectPath(cop)->getNameSpace(),
204 qop); //*CM_ObjectPath(cop));
205 CMReturn(CMPI_RC_OK);
206 }
|
207 konrad.r 1.20 catch (const CIMException &e) {
|
208 schuur 1.11 DDD(cout<<"### exception: mbDeleteInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
209 CMReturnWithString((CMPIrc)e.getCode(),
210 (CMPIString*)string2CMPIString(e.getMessage()));
211 }
212 CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-3");
|
213 schuur 1.1 }
214
|
215 konrad.r 1.20 static CMPIEnumeration* mbExecQuery(const CMPIBroker *mb,
216 const CMPIContext *ctx,
217 const CMPIObjectPath *cop,
218 const char *query, const char *lang, CMPIStatus *rc) {
|
219 schuur 1.11 DDD(cout<<"--- mbExecQuery()"<<endl);
220 mb=CM_BROKER;
221
222 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
223 try {
224 Array<CIMObject> const &en=CM_CIMOM(mb)->execQuery(
225 OperationContext(*CM_Context(ctx)),
226 CM_ObjectPath(cop)->getNameSpace(),
227 String(query),
228 String(lang));
229 if (rc) CMSetStatus(rc,CMPI_RC_OK);
|
230 r.kieninger 1.19 CMPI_Object *obj =
231 new CMPI_Object(new CMPI_ObjEnumeration(new Array<CIMObject>(en)));
232 return (CMPI_ObjEnumeration *)obj->getHdl();
233
|
234 schuur 1.11 }
|
235 konrad.r 1.20 catch (const CIMException &e) {
|
236 schuur 1.11 DDD(cout<<"### exception: mbExecQuery - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
237 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
238 (CMPIString*)string2CMPIString(e.getMessage()));
239 }
240 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERR_FAILED,"Internal error - CMPIBoker.cpp-4");
241 return NULL;
|
242 schuur 1.1 }
243
|
244 konrad.r 1.20 static CMPIEnumeration* mbEnumInstances(const CMPIBroker *mb, const CMPIContext *ctx,
245 const CMPIObjectPath *cop, const char **properties, CMPIStatus *rc) {
|
246 schuur 1.11 DDD(cout<<"--- mbEnumInstances()"<<endl);
247 mb=CM_BROKER;
248
249 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
|
250 konrad.r 1.20 const CIMPropertyList props=getList(properties);
|
251 schuur 1.11
252 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
253 try {
254 Array<CIMInstance> const &en=CM_CIMOM(mb)->enumerateInstances(
255 OperationContext(*CM_Context(ctx)),
256 CM_ObjectPath(cop)->getNameSpace(),
257 CM_ObjectPath(cop)->getClassName(),
258 CM_DeepInheritance(flgs),
259 CM_LocalOnly(flgs),
260 CM_IncludeQualifiers(flgs),
261 CM_ClassOrigin(flgs),
262 props);
263 if (rc) CMSetStatus(rc,CMPI_RC_OK);
|
264 r.kieninger 1.19 CMPI_Object *obj =
265 new CMPI_Object(new CMPI_InstEnumeration(new Array<CIMInstance>(en)));
266 return (CMPI_InstEnumeration*)obj->getHdl();
267
|
268 schuur 1.11 }
|
269 konrad.r 1.20 catch (const CIMException &e) {
|
270 schuur 1.11 DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
271 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
272 (CMPIString*)string2CMPIString(e.getMessage()));
273 return NULL;
274 }
275 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-5");
276 return NULL;
|
277 schuur 1.1 }
278
|
279 konrad.r 1.20 static CMPIEnumeration* mbEnumInstanceNames(const CMPIBroker *mb, const CMPIContext *ctx,
280 const CMPIObjectPath *cop, CMPIStatus *rc) {
|
281 schuur 1.11 DDD(cout<<"--- mbEnumInstanceNames()"<<endl);
282 mb=CM_BROKER;
283
284 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
285 try {
286 Array<CIMObjectPath> const &en=CM_CIMOM(mb)->enumerateInstanceNames(
287 OperationContext(*CM_Context(ctx)),
288 CM_ObjectPath(cop)->getNameSpace(),
289 CM_ObjectPath(cop)->getClassName());
290 if (rc) CMSetStatus(rc,CMPI_RC_OK);
|
291 r.kieninger 1.19 CMPI_Object *obj =
292 new CMPI_Object(new CMPI_OpEnumeration(new Array<CIMObjectPath>(en)));
293 return (CMPI_OpEnumeration *)obj->getHdl();
294
|
295 schuur 1.11 }
|
296 konrad.r 1.20 catch (const CIMException &e) {
|
297 schuur 1.11 DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
298 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
299 (CMPIString*)string2CMPIString(e.getMessage()));
300 }
301 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-6");
|
302 schuur 1.9 return NULL;
|
303 schuur 1.1 }
304
|
305 konrad.r 1.20 static CMPIEnumeration* mbAssociators(const CMPIBroker *mb, const CMPIContext *ctx,
306 const CMPIObjectPath *cop, const char *assocClass, const char *resultClass,
307 const char *role, const char *resultRole, const char **properties, CMPIStatus *rc) {
|
308 schuur 1.11 DDD(cout<<"--- mbAssociators()"<<endl);
309 mb=CM_BROKER;
310 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
|
311 konrad.r 1.20 const CIMPropertyList props=getList(properties);
|
312 schuur 1.11 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
313 CM_ObjectPath(cop)->getClassName(),
314 CM_ObjectPath(cop)->getKeyBindings());
315
316 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
317 try {
318 Array<CIMObject> const &en=CM_CIMOM(mb)->associators(
319 OperationContext(*CM_Context(ctx)),
320 CM_ObjectPath(cop)->getNameSpace(),
|
321 r.kieninger 1.16 qop,
|
322 schuur 1.11 assocClass ? CIMName(assocClass) : CIMName(),
323 resultClass ? CIMName(resultClass) : CIMName(),
324 role ? String(role) : String::EMPTY,
325 resultRole ? String(resultRole) : String::EMPTY,
326 CM_IncludeQualifiers(flgs),
327 CM_ClassOrigin(flgs),
328 props);
329 if (rc) CMSetStatus(rc,CMPI_RC_OK);
|
330 r.kieninger 1.19 CMPI_Object *obj =
331 new CMPI_Object(new CMPI_ObjEnumeration(new Array<CIMObject>(en)));
332 return (CMPI_ObjEnumeration *)obj->getHdl();
333
|
334 schuur 1.11 }
|
335 konrad.r 1.20 catch (const CIMException &e) {
|
336 schuur 1.11 DDD(cout<<"### exception: mbAssociators - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
337 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
338 (CMPIString*)string2CMPIString(e.getMessage()));
339 return NULL;
340 }
341 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-7");
342 return NULL;
|
343 schuur 1.1 }
344
|
345 konrad.r 1.20 static CMPIEnumeration* mbAssociatorNames(const CMPIBroker *mb,
346 const CMPIContext *ctx,
347 const CMPIObjectPath *cop,
348 const char *assocClass,
349 const char *resultClass,
|
350 schuur 1.11 const char *role, const char *resultRole, CMPIStatus *rc) {
351 DDD(cout<<"--- mbAssociatorsNames()"<<endl);
352 mb=CM_BROKER;
353 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
354 CM_ObjectPath(cop)->getClassName(),
355 CM_ObjectPath(cop)->getKeyBindings());
356
357 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
358 try {
359 Array<CIMObjectPath> const &en=CM_CIMOM(mb)->associatorNames(
360 OperationContext(*CM_Context(ctx)),
361 CM_ObjectPath(cop)->getNameSpace(),
|
362 r.kieninger 1.16 qop,
|
363 schuur 1.11 assocClass ? CIMName(assocClass) : CIMName(),
364 resultClass ? CIMName(resultClass) : CIMName(),
365 role ? String(role) : String::EMPTY,
366 resultRole ? String(resultRole) : String::EMPTY);
367 if (rc) CMSetStatus(rc,CMPI_RC_OK);
|
368 r.kieninger 1.19 CMPI_Object *obj =
369 new CMPI_Object(new CMPI_OpEnumeration(new Array<CIMObjectPath>(en)));
370 return (CMPI_OpEnumeration *)obj->getHdl();
|
371 schuur 1.11 }
|
372 konrad.r 1.20 catch (const CIMException &e) {
|
373 schuur 1.11 DDD(cout<<"### exception: mbAssociatorsNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
374 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
375 (CMPIString*)string2CMPIString(e.getMessage()));
376 }
377 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-8");
|
378 schuur 1.9 return NULL;
|
379 schuur 1.1 }
380
|
381 konrad.r 1.20 static CMPIEnumeration* mbReferences(const CMPIBroker *mb, const CMPIContext *ctx,
382 const CMPIObjectPath *cop, const char *resultClass, const char *role ,
383 const char **properties, CMPIStatus *rc) {
|
384 schuur 1.11 DDD(cout<<"--- mbReferences()"<<endl);
385 mb=CM_BROKER;
386 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
387 CIMPropertyList props=getList(properties);
388 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
389 CM_ObjectPath(cop)->getClassName(),
390 CM_ObjectPath(cop)->getKeyBindings());
391
392 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
393 try {
394 Array<CIMObject> const &en=CM_CIMOM(mb)->references(
395 OperationContext(*CM_Context(ctx)),
396 CM_ObjectPath(cop)->getNameSpace(),
397 qop,
398 resultClass ? CIMName(resultClass) : CIMName(),
399 role ? String(role) : String::EMPTY,
400 CM_IncludeQualifiers(flgs),
401 CM_ClassOrigin(flgs),
402 props);
403 if (rc) CMSetStatus(rc,CMPI_RC_OK);
|
404 r.kieninger 1.19 CMPI_Object *obj =
405 new CMPI_Object(new CMPI_ObjEnumeration(new Array<CIMObject>(en)));
406 return (CMPI_ObjEnumeration *)obj->getHdl();
|
407 schuur 1.11 }
|
408 konrad.r 1.20 catch (const CIMException &e) {
|
409 schuur 1.11 DDD(cout<<"### exception: mbReferences - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
410 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
411 (CMPIString*)string2CMPIString(e.getMessage()));
412 return NULL;
413 }
414 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-10");
415 return NULL;
|
416 schuur 1.1 }
417
|
418 konrad.r 1.20 static CMPIEnumeration* mbReferenceNames(const CMPIBroker *mb, const CMPIContext *ctx,
419 const CMPIObjectPath *cop, const char *resultClass, const char *role,
|
420 schuur 1.11 CMPIStatus *rc) {
421 DDD(cout<<"--- mbReferencesNames()"<<endl);
422 mb=CM_BROKER;
423 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
424 CM_ObjectPath(cop)->getClassName(),
425 CM_ObjectPath(cop)->getKeyBindings());
426
427 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
428 try {
429 Array<CIMObjectPath> const &en=CM_CIMOM(mb)->referenceNames(
430 OperationContext(*CM_Context(ctx)),
431 CM_ObjectPath(cop)->getNameSpace(),
|
432 r.kieninger 1.16 qop,
|
433 schuur 1.11 resultClass ? CIMName(resultClass) : CIMName(),
434 role ? String(role) : String::EMPTY);
435 if (rc) CMSetStatus(rc,CMPI_RC_OK);
|
436 r.kieninger 1.19 CMPI_Object *obj =
437 new CMPI_Object(new CMPI_OpEnumeration(new Array<CIMObjectPath>(en)));
438 return (CMPI_OpEnumeration *)obj->getHdl();
|
439 schuur 1.11 }
|
440 konrad.r 1.20 catch (const CIMException &e) {
|
441 schuur 1.11 DDD(cout<<"### exception: mbReferencesNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
442 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
443 (CMPIString*)string2CMPIString(e.getMessage()));
444 }
445 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-11");
|
446 schuur 1.9 return NULL;
|
447 schuur 1.1 }
448
|
449 konrad.r 1.20 static CMPIData mbInvokeMethod(const CMPIBroker *mb, const CMPIContext *ctx,
450 const CMPIObjectPath *cop, const char *method, const CMPIArgs *in, CMPIArgs *out,
|
451 schuur 1.11 CMPIStatus *rc) {
|
452 konrad.r 1.13 CMPIData data={0,CMPI_nullValue,{0}};
|
453 schuur 1.11 mb=CM_BROKER;
454 if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_SUPPORTED);
455 return data;
|
456 schuur 1.1 }
457
|
458 konrad.r 1.20 static CMPIStatus mbSetProperty(const CMPIBroker *mb, const CMPIContext *ctx,
459 const CMPIObjectPath *cop, const char *name, const CMPIValue *val,
|
460 konrad.r 1.22 CMPIType type) {
|
461 schuur 1.11 DDD(cout<<"--- mbSetProperty()"<<endl);
462 mb=CM_BROKER;
463 CMPIrc rc;
464 CIMValue v=value2CIMValue(val,type,&rc);
465
466 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
467 try {
468 CM_CIMOM(mb)->setProperty(
469 OperationContext(*CM_Context(ctx)),
470 CM_ObjectPath(cop)->getNameSpace(),
471 *CM_ObjectPath(cop),
472 String(name),
473 v);
474 CMReturn(CMPI_RC_OK);
475 }
|
476 konrad.r 1.20 catch (const CIMException &e) {
|
477 schuur 1.11 DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
478 CMReturnWithString((CMPIrc)e.getCode(),
479 (CMPIString*)string2CMPIString(e.getMessage()));
480 }
481 CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-12");
|
482 schuur 1.1 }
483
|
484 konrad.r 1.20 static CMPIData mbGetProperty(const CMPIBroker *mb, const CMPIContext *ctx,
485 const CMPIObjectPath *cop, const char *name, CMPIStatus *rc) {
|
486 schuur 1.11 DDD(cout<<"--- mbGetProperty()"<<endl);
487 mb=CM_BROKER;
|
488 konrad.r 1.13 CMPIData data={0,CMPI_nullValue,{0}};
|
489 schuur 1.11
490 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
491 try {
492 CIMValue v=CM_CIMOM(mb)->getProperty(
493 OperationContext(*CM_Context(ctx)),
494 CM_ObjectPath(cop)->getNameSpace(),
495 *CM_ObjectPath(cop),
496 String(name));
497 CIMType vType=v.getType();
498 CMPIType t=type2CMPIType(vType,v.isArray());
499 value2CMPIData(v,t,&data);
500 if (rc) CMSetStatus(rc,CMPI_RC_OK);
501 return data;
502 }
|
503 konrad.r 1.20 catch (const CIMException &e) {
|
504 schuur 1.11 DDD(cout<<"### exception: mbGetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
505 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
506 }
507 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
|
508 schuur 1.1 return data;
509 }
|
510 schuur 1.11
|
511 konrad.r 1.20 static CMPIContext* mbPrepareAttachThread(const CMPIBroker* mb, const CMPIContext* eCtx) {
|
512 schuur 1.11 DDD(cout<<"--- mbPrepareAttachThread()"<<endl);
513 mb=CM_BROKER;
514 OperationContext *ctx=(OperationContext*)((CMPI_Context*)eCtx)->ctx;
515 OperationContext nctx=*ctx;
516 CMPIContext* neCtx=new CMPI_Context(*(new OperationContext(nctx)));
517 CMPIString *name;
518 for (int i=0,s=CMPI_Args_Ftab->getArgCount((CMPIArgs*)eCtx,NULL); i<s; i++) {
519 CMPIData data=CMPI_Args_Ftab->getArgAt((CMPIArgs*)eCtx,i,&name,NULL);
520 CMPI_Args_Ftab->addArg((CMPIArgs*)neCtx,CMGetCharPtr(name),&data.value,data.type);
521 }
522 return neCtx;
|
523 schuur 1.1 }
524
|
525 konrad.r 1.20 static CMPIStatus mbAttachThread(const CMPIBroker* mb, const CMPIContext* eCtx) {
|
526 schuur 1.11 DDD(cout<<"--- mbAttachThread()"<<endl);
527 ((CMPI_Context*)eCtx)->thr=new CMPI_ThreadContext(mb,eCtx);
528 CMReturn(CMPI_RC_OK);
|
529 schuur 1.1 }
530
|
531 konrad.r 1.20 static CMPIStatus mbDetachThread(const CMPIBroker* mb, const CMPIContext* eCtx) {
|
532 schuur 1.11 DDD(cout<<"--- mbDetachThread()"<<endl);
533 mb=CM_BROKER;
534 delete ((CMPI_Context*)eCtx)->thr;
535 CMReturn(CMPI_RC_OK);
536 }
|
537 schuur 1.1
|
538 konrad.r 1.20 static CMPIStatus mbDeliverIndication(const CMPIBroker* eMb, const CMPIContext* ctx,
539 const char *ns, const CMPIInstance* ind) {
|
540 schuur 1.11 DDD(cout<<"--- mbDeliverIndication()"<<endl);
541 eMb=CM_BROKER;
542 CMPI_Broker *mb=(CMPI_Broker*)eMb;
543 CMPIProviderManager::indProvRecord *prec;
544 OperationContext* context=CM_Context(ctx);
545
546 if (CMPIProviderManager::provTab.lookup(mb->name,prec)) {
547 if (prec->enabled) {
548 try {
549 context->get(SubscriptionInstanceNamesContainer::NAME);
550 }
|
551 konrad.r 1.21 catch (const Exception &) {
|
552 schuur 1.11 Array<CIMObjectPath> subscriptionInstanceNames;
553 context->insert(SubscriptionInstanceNamesContainer(subscriptionInstanceNames));
554 }
555 CIMIndication cimIndication(*CM_Instance(ind));
556 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
557 try {
558 prec->handler->deliver(
559 *context,
560 // OperationContext(*CM_Context(ctx)),
561 cimIndication);
562 CMReturn(CMPI_RC_OK);
563 }
|
564 konrad.r 1.20 catch (const CIMException &e) {
|
565 schuur 1.11 DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
566 CMReturn((CMPIrc)e.getCode());
567 }
|
568 schuur 1.7 }
569 }
|
570 schuur 1.11 CMReturn(CMPI_RC_ERR_FAILED);
|
571 schuur 1.1 }
|
572 schuur 1.11
573 }
|
574 schuur 1.1
575 static CMPIBrokerFT broker_FT={
576 0, // brokerClassification;
577 CMPICurrentVersion,
578 "Pegasus",
579 mbPrepareAttachThread,
580 mbAttachThread,
581 mbDetachThread,
582 mbDeliverIndication,
583 mbEnumInstanceNames,
584 mbGetInstance,
585 mbCreateInstance,
|
586 konrad.r 1.20 mbModifyInstance,
|
587 schuur 1.1 mbDeleteInstance,
588 mbExecQuery,
589 mbEnumInstances,
590 mbAssociators,
591 mbAssociatorNames,
592 mbReferences,
593 mbReferenceNames,
594 mbInvokeMethod,
595 mbSetProperty,
596 mbGetProperty,
597 };
598
599 CMPIBrokerFT *CMPI_Broker_Ftab=& broker_FT;
600
601 PEGASUS_NAMESPACE_END
602
603
|