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 schuur 1.11 static CIMPropertyList getList(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 CIMClass* mbGetClass(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 catch (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 schuur 1.11 static CMPIInstance* mbGetInstance(CMPIBroker *mb, CMPIContext *ctx,
107 CMPIObjectPath *cop, char **properties, CMPIStatus *rc) {
108 DDD(cout<<"--- mbGetInstance()"<<endl);
109 mb=CM_BROKER;
110 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
111 CIMPropertyList props=getList(properties);
112 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.16 ci.setPath(qop);
|
127 schuur 1.11 if (rc) CMSetStatus(rc,CMPI_RC_OK);
128 return (CMPIInstance*)new CMPI_Object(new CIMInstance(ci));
129 }
130 catch (CIMException &e) {
131 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 static CMPIObjectPath* mbCreateInstance(CMPIBroker *mb, CMPIContext *ctx,
141 CMPIObjectPath *cop, CMPIInstance *ci, CMPIStatus *rc) {
142 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 catch (CIMException &e) {
155 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 schuur 1.11 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 schuur 1.11 static CMPIStatus mbSetInstance(CMPIBroker *mb, CMPIContext *ctx,
165 CMPIObjectPath *cop, CMPIInstance *ci, char ** properties) {
166 DDD(cout<<"--- mbSetInstance()"<<endl);
167 mb=CM_BROKER;
168 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
169 CIMPropertyList props=getList(properties);
170
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 catch (CIMException &e) {
184 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 schuur 1.11 static CMPIStatus mbDeleteInstance (CMPIBroker *mb, CMPIContext *ctx,
192 CMPIObjectPath *cop) {
193 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 catch (CIMException &e) {
208 DDD(cout<<"### exception: mbDeleteInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
209 CMReturnWithString((CMPIrc)e.getCode(),
210 (CMPIString*)string2CMPIString(e.getMessage()));
211 }
212 schuur 1.11 CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-3");
|
213 schuur 1.1 }
214
|
215 schuur 1.11 static CMPIEnumeration* mbExecQuery(CMPIBroker *mb, CMPIContext *ctx,
216 CMPIObjectPath *cop, const char *query, const char *lang, CMPIStatus *rc) {
217 DDD(cout<<"--- mbExecQuery()"<<endl);
218 mb=CM_BROKER;
219
220 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
221 try {
222 Array<CIMObject> const &en=CM_CIMOM(mb)->execQuery(
223 OperationContext(*CM_Context(ctx)),
224 CM_ObjectPath(cop)->getNameSpace(),
225 String(query),
226 String(lang));
227 if (rc) CMSetStatus(rc,CMPI_RC_OK);
228 return new CMPI_ObjEnumeration(new Array<CIMObject>(en));
229 }
230 catch (CIMException &e) {
231 DDD(cout<<"### exception: mbExecQuery - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
232 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
233 (CMPIString*)string2CMPIString(e.getMessage()));
234 }
235 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERR_FAILED,"Internal error - CMPIBoker.cpp-4");
236 schuur 1.11 return NULL;
|
237 schuur 1.1 }
238
|
239 schuur 1.11 static CMPIEnumeration* mbEnumInstances(CMPIBroker *mb, CMPIContext *ctx,
240 CMPIObjectPath *cop, char **properties, CMPIStatus *rc) {
241 DDD(cout<<"--- mbEnumInstances()"<<endl);
242 mb=CM_BROKER;
243
244 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
245 CIMPropertyList props=getList(properties);
246
247 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
248 try {
249 Array<CIMInstance> const &en=CM_CIMOM(mb)->enumerateInstances(
250 OperationContext(*CM_Context(ctx)),
251 CM_ObjectPath(cop)->getNameSpace(),
252 CM_ObjectPath(cop)->getClassName(),
253 CM_DeepInheritance(flgs),
254 CM_LocalOnly(flgs),
255 CM_IncludeQualifiers(flgs),
256 CM_ClassOrigin(flgs),
257 props);
258 if (rc) CMSetStatus(rc,CMPI_RC_OK);
259 return new CMPI_InstEnumeration(new Array<CIMInstance>(en));
260 schuur 1.11 }
261 catch (CIMException &e) {
262 DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
263 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
264 (CMPIString*)string2CMPIString(e.getMessage()));
265 return NULL;
266 }
267 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-5");
268 return NULL;
|
269 schuur 1.1 }
270
|
271 schuur 1.11 static CMPIEnumeration* mbEnumInstanceNames(CMPIBroker *mb, CMPIContext *ctx,
272 CMPIObjectPath *cop, CMPIStatus *rc) {
273 DDD(cout<<"--- mbEnumInstanceNames()"<<endl);
274 mb=CM_BROKER;
275
276 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
277 try {
278 Array<CIMObjectPath> const &en=CM_CIMOM(mb)->enumerateInstanceNames(
279 OperationContext(*CM_Context(ctx)),
280 CM_ObjectPath(cop)->getNameSpace(),
281 CM_ObjectPath(cop)->getClassName());
282 if (rc) CMSetStatus(rc,CMPI_RC_OK);
283 return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
284 }
285 catch (CIMException &e) {
286 DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
287 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
288 (CMPIString*)string2CMPIString(e.getMessage()));
289 }
290 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-6");
|
291 schuur 1.9 return NULL;
|
292 schuur 1.1 }
293
|
294 schuur 1.11 static CMPIEnumeration* mbAssociators(CMPIBroker *mb, CMPIContext *ctx,
295 CMPIObjectPath *cop, const char *assocClass, const char *resultClass,
296 const char *role, const char *resultRole, char **properties, CMPIStatus *rc) {
297 DDD(cout<<"--- mbAssociators()"<<endl);
298 mb=CM_BROKER;
299 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
300 CIMPropertyList props=getList(properties);
301 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
302 CM_ObjectPath(cop)->getClassName(),
303 CM_ObjectPath(cop)->getKeyBindings());
304
305 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
306 try {
307 Array<CIMObject> const &en=CM_CIMOM(mb)->associators(
308 OperationContext(*CM_Context(ctx)),
309 CM_ObjectPath(cop)->getNameSpace(),
|
310 r.kieninger 1.16 qop,
|
311 schuur 1.11 assocClass ? CIMName(assocClass) : CIMName(),
312 resultClass ? CIMName(resultClass) : CIMName(),
313 role ? String(role) : String::EMPTY,
314 resultRole ? String(resultRole) : String::EMPTY,
315 CM_IncludeQualifiers(flgs),
316 CM_ClassOrigin(flgs),
317 props);
318 if (rc) CMSetStatus(rc,CMPI_RC_OK);
319 return new CMPI_ObjEnumeration(new Array<CIMObject>(en));
320 }
321 catch (CIMException &e) {
322 DDD(cout<<"### exception: mbAssociators - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
323 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
324 (CMPIString*)string2CMPIString(e.getMessage()));
325 return NULL;
326 }
327 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-7");
328 return NULL;
|
329 schuur 1.1 }
330
|
331 schuur 1.11 static CMPIEnumeration* mbAssociatorNames(CMPIBroker *mb, CMPIContext *ctx,
332 CMPIObjectPath *cop, const char *assocClass, const char *resultClass,
333 const char *role, const char *resultRole, CMPIStatus *rc) {
334 DDD(cout<<"--- mbAssociatorsNames()"<<endl);
335 mb=CM_BROKER;
336 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
337 CM_ObjectPath(cop)->getClassName(),
338 CM_ObjectPath(cop)->getKeyBindings());
339
340 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
341 try {
342 Array<CIMObjectPath> const &en=CM_CIMOM(mb)->associatorNames(
343 OperationContext(*CM_Context(ctx)),
344 CM_ObjectPath(cop)->getNameSpace(),
|
345 r.kieninger 1.16 qop,
|
346 schuur 1.11 assocClass ? CIMName(assocClass) : CIMName(),
347 resultClass ? CIMName(resultClass) : CIMName(),
348 role ? String(role) : String::EMPTY,
349 resultRole ? String(resultRole) : String::EMPTY);
350 if (rc) CMSetStatus(rc,CMPI_RC_OK);
351 return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
352 }
353 catch (CIMException &e) {
354 DDD(cout<<"### exception: mbAssociatorsNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
355 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
356 (CMPIString*)string2CMPIString(e.getMessage()));
357 }
358 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-8");
|
359 schuur 1.9 return NULL;
|
360 schuur 1.1 }
361
|
362 schuur 1.11 static CMPIEnumeration* mbReferences(CMPIBroker *mb, CMPIContext *ctx,
363 CMPIObjectPath *cop, const char *resultClass, const char *role ,
364 char **properties, CMPIStatus *rc) {
365 DDD(cout<<"--- mbReferences()"<<endl);
366 mb=CM_BROKER;
367 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
368 CIMPropertyList props=getList(properties);
369 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
370 CM_ObjectPath(cop)->getClassName(),
371 CM_ObjectPath(cop)->getKeyBindings());
372
373 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
374 try {
375 Array<CIMObject> const &en=CM_CIMOM(mb)->references(
376 OperationContext(*CM_Context(ctx)),
377 CM_ObjectPath(cop)->getNameSpace(),
378 qop,
379 resultClass ? CIMName(resultClass) : CIMName(),
380 role ? String(role) : String::EMPTY,
381 CM_IncludeQualifiers(flgs),
382 CM_ClassOrigin(flgs),
383 schuur 1.11 props);
384 if (rc) CMSetStatus(rc,CMPI_RC_OK);
385 return new CMPI_ObjEnumeration(new Array<CIMObject>(en));
386 }
387 catch (CIMException &e) {
388 DDD(cout<<"### exception: mbReferences - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
389 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
390 (CMPIString*)string2CMPIString(e.getMessage()));
391 return NULL;
392 }
393 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-10");
394 return NULL;
|
395 schuur 1.1 }
396
|
397 schuur 1.11 static CMPIEnumeration* mbReferenceNames(CMPIBroker *mb, CMPIContext *ctx,
398 CMPIObjectPath *cop, const char *resultClass, const char *role,
399 CMPIStatus *rc) {
400 DDD(cout<<"--- mbReferencesNames()"<<endl);
401 mb=CM_BROKER;
402 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
403 CM_ObjectPath(cop)->getClassName(),
404 CM_ObjectPath(cop)->getKeyBindings());
405
406 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
407 try {
408 Array<CIMObjectPath> const &en=CM_CIMOM(mb)->referenceNames(
409 OperationContext(*CM_Context(ctx)),
410 CM_ObjectPath(cop)->getNameSpace(),
|
411 r.kieninger 1.16 qop,
|
412 schuur 1.11 resultClass ? CIMName(resultClass) : CIMName(),
413 role ? String(role) : String::EMPTY);
414 if (rc) CMSetStatus(rc,CMPI_RC_OK);
415 return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
416 }
417 catch (CIMException &e) {
418 DDD(cout<<"### exception: mbReferencesNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
419 if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
420 (CMPIString*)string2CMPIString(e.getMessage()));
421 }
422 if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-11");
|
423 schuur 1.9 return NULL;
|
424 schuur 1.1 }
425
|
426 schuur 1.11 static CMPIData mbInvokeMethod(CMPIBroker *mb, CMPIContext *ctx,
427 CMPIObjectPath *cop, const char *method, CMPIArgs *in, CMPIArgs *out,
428 CMPIStatus *rc) {
|
429 konrad.r 1.13 CMPIData data={0,CMPI_nullValue,{0}};
|
430 schuur 1.11 mb=CM_BROKER;
431 if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_SUPPORTED);
432 return data;
|
433 schuur 1.1 }
434
|
435 schuur 1.11 static CMPIStatus mbSetProperty(CMPIBroker *mb, CMPIContext *ctx,
436 CMPIObjectPath *cop, const char *name, CMPIValue *val,
437 CMPIType type) {
438 DDD(cout<<"--- mbSetProperty()"<<endl);
439 mb=CM_BROKER;
440 CMPIrc rc;
441 CIMValue v=value2CIMValue(val,type,&rc);
442
443 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
444 try {
445 CM_CIMOM(mb)->setProperty(
446 OperationContext(*CM_Context(ctx)),
447 CM_ObjectPath(cop)->getNameSpace(),
448 *CM_ObjectPath(cop),
449 String(name),
450 v);
451 CMReturn(CMPI_RC_OK);
452 }
453 catch (CIMException &e) {
454 DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
455 CMReturnWithString((CMPIrc)e.getCode(),
456 schuur 1.11 (CMPIString*)string2CMPIString(e.getMessage()));
457 }
458 CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-12");
|
459 schuur 1.1 }
460
|
461 schuur 1.11 static CMPIData mbGetProperty(CMPIBroker *mb, CMPIContext *ctx,
462 CMPIObjectPath *cop, const char *name, CMPIStatus *rc) {
463 DDD(cout<<"--- mbGetProperty()"<<endl);
464 mb=CM_BROKER;
|
465 konrad.r 1.13 CMPIData data={0,CMPI_nullValue,{0}};
|
466 schuur 1.11
467 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
468 try {
469 CIMValue v=CM_CIMOM(mb)->getProperty(
470 OperationContext(*CM_Context(ctx)),
471 CM_ObjectPath(cop)->getNameSpace(),
472 *CM_ObjectPath(cop),
473 String(name));
474 CIMType vType=v.getType();
475 CMPIType t=type2CMPIType(vType,v.isArray());
476 value2CMPIData(v,t,&data);
477 if (rc) CMSetStatus(rc,CMPI_RC_OK);
478 return data;
479 }
480 catch (CIMException &e) {
481 DDD(cout<<"### exception: mbGetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
482 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
483 }
484 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
|
485 schuur 1.1 return data;
486 }
|
487 schuur 1.11
488 static CMPIContext* mbPrepareAttachThread(CMPIBroker* mb, CMPIContext* eCtx) {
489 DDD(cout<<"--- mbPrepareAttachThread()"<<endl);
490 mb=CM_BROKER;
491 OperationContext *ctx=(OperationContext*)((CMPI_Context*)eCtx)->ctx;
492 OperationContext nctx=*ctx;
493 CMPIContext* neCtx=new CMPI_Context(*(new OperationContext(nctx)));
494 CMPIString *name;
495 for (int i=0,s=CMPI_Args_Ftab->getArgCount((CMPIArgs*)eCtx,NULL); i<s; i++) {
496 CMPIData data=CMPI_Args_Ftab->getArgAt((CMPIArgs*)eCtx,i,&name,NULL);
497 CMPI_Args_Ftab->addArg((CMPIArgs*)neCtx,CMGetCharPtr(name),&data.value,data.type);
498 }
499 return neCtx;
|
500 schuur 1.1 }
501
|
502 schuur 1.11 static CMPIStatus mbAttachThread(CMPIBroker* mb, CMPIContext* eCtx) {
503 DDD(cout<<"--- mbAttachThread()"<<endl);
504 ((CMPI_Context*)eCtx)->thr=new CMPI_ThreadContext(mb,eCtx);
505 CMReturn(CMPI_RC_OK);
|
506 schuur 1.1 }
507
|
508 schuur 1.11 static CMPIStatus mbDetachThread(CMPIBroker* mb, CMPIContext* eCtx) {
509 DDD(cout<<"--- mbDetachThread()"<<endl);
510 mb=CM_BROKER;
511 delete ((CMPI_Context*)eCtx)->thr;
512 CMReturn(CMPI_RC_OK);
513 }
|
514 schuur 1.1
|
515 schuur 1.11 static CMPIStatus mbDeliverIndication(CMPIBroker* eMb, CMPIContext* ctx,
516 const char *ns, CMPIInstance* ind) {
517 DDD(cout<<"--- mbDeliverIndication()"<<endl);
518 eMb=CM_BROKER;
519 CMPI_Broker *mb=(CMPI_Broker*)eMb;
520 CMPIProviderManager::indProvRecord *prec;
521 OperationContext* context=CM_Context(ctx);
522
523 if (CMPIProviderManager::provTab.lookup(mb->name,prec)) {
524 if (prec->enabled) {
525 try {
526 context->get(SubscriptionInstanceNamesContainer::NAME);
527 }
|
528 konrad.r 1.17 catch (Exception&) {
|
529 schuur 1.11 Array<CIMObjectPath> subscriptionInstanceNames;
530 context->insert(SubscriptionInstanceNamesContainer(subscriptionInstanceNames));
531 }
532 CIMIndication cimIndication(*CM_Instance(ind));
533 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
534 try {
535 prec->handler->deliver(
536 *context,
537 // OperationContext(*CM_Context(ctx)),
538 cimIndication);
539 CMReturn(CMPI_RC_OK);
540 }
541 catch (CIMException &e) {
542 DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
543 CMReturn((CMPIrc)e.getCode());
544 }
|
545 schuur 1.7 }
546 }
|
547 schuur 1.11 CMReturn(CMPI_RC_ERR_FAILED);
|
548 schuur 1.1 }
|
549 schuur 1.11
550 }
|
551 schuur 1.1
552 static CMPIBrokerFT broker_FT={
553 0, // brokerClassification;
554 CMPICurrentVersion,
555 "Pegasus",
556 mbPrepareAttachThread,
557 mbAttachThread,
558 mbDetachThread,
559 mbDeliverIndication,
560 mbEnumInstanceNames,
561 mbGetInstance,
562 mbCreateInstance,
563 mbSetInstance,
564 mbDeleteInstance,
565 mbExecQuery,
566 mbEnumInstances,
567 mbAssociators,
568 mbAssociatorNames,
569 mbReferences,
570 mbReferenceNames,
571 mbInvokeMethod,
572 schuur 1.1 mbSetProperty,
573 mbGetProperty,
574 };
575
576 CMPIBrokerFT *CMPI_Broker_Ftab=& broker_FT;
577
578 PEGASUS_NAMESPACE_END
579
580
|