63 schuur 1.1 CIMClass *ccp;
64
65 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
66 if (xBroker->clsCache) {
67 if (xBroker->clsCache->lookup(clsId,ccp)) return ccp;
68 }
69 else xBroker->clsCache=new ClassCache();
70
71 try {
72 CIMClass cc=CM_CIMOM(mb)->getClass(
73 OperationContext(),
74 cop.getNameSpace(),
75 cop.getClassName(),
76 (bool)0,
77 (bool)1,
78 (bool)0,
79 CIMPropertyList());
80 ccp=new CIMClass(cc);
81 xBroker->clsCache->insert(clsId,ccp);
82 return ccp;
83 }
84 schuur 1.1 catch (CIMException &e) {
85 DDD(cout<<"### exception: mbGetClass - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
86 }
87 return NULL;
88 }
89
90 static CMPIInstance* mbGetInstance(CMPIBroker *mb, CMPIContext *ctx,
91 CMPIObjectPath *cop, char **properties, CMPIStatus *rc) {
92 DDD(cout<<"--- mbGetInstance()"<<std::endl);
93 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
94 CIMPropertyList *props=getList(properties);
95 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
96 CM_ObjectPath(cop)->getClassName(),
97 CM_ObjectPath(cop)->getKeyBindings());
98
99 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
100 try {
101 CIMInstance ci=CM_CIMOM(mb)->getInstance(
102 OperationContext(*CM_Context(ctx)),
103 CM_ObjectPath(cop)->getNameSpace(),
104 qop, //*CM_ObjectPath(cop),
105 schuur 1.1 CM_LocalOnly(flgs),
106 CM_IncludeQualifiers(flgs),
107 CM_ClassOrigin(flgs),
108 *props);
109 delete props;
110 if (rc) CMSetStatus(rc,CMPI_RC_OK);
111 return (CMPIInstance*)new CMPI_Object(new CIMInstance(ci));
112 }
113 catch (CIMException &e) {
114 DDD(cout<<"### exception: mbGetInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
115 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
116 }
117 delete props;
118 return NULL;
119 }
120
121 static CMPIObjectPath* mbCreateInstance(CMPIBroker *mb, CMPIContext *ctx,
122 CMPIObjectPath *cop, CMPIInstance *ci, CMPIStatus *rc) {
123 DDD(cout<<"--- mbCreateInstance()"<<std::endl);
124
125 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
126 schuur 1.1 try {
127 CIMObjectPath ncop=CM_CIMOM(mb)->createInstance(
128 OperationContext(*CM_Context(ctx)),
129 CM_ObjectPath(cop)->getNameSpace(),
130 *CM_Instance(ci));
131 if (rc) CMSetStatus(rc,CMPI_RC_OK);
132 return (CMPIObjectPath*)new CMPI_Object(new CIMObjectPath(ncop));
133 }
134 catch (CIMException &e) {
135 DDD(cout<<"### exception: mbCreateInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
136 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
137 }
138 if (rc) CMSetStatus(rc,CMPI_RC_ERROR);
139 return NULL;
140 }
141
142 static CMPIStatus mbSetInstance(CMPIBroker *mb, CMPIContext *ctx,
143 CMPIObjectPath *cop, CMPIInstance *ci) {
144 DDD(cout<<"--- mbSetInstance()"<<std::endl);
145 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
146
147 schuur 1.1 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
148 try {
149 CM_CIMOM(mb)->modifyInstance(
150 OperationContext(*CM_Context(ctx)),
151 CM_ObjectPath(cop)->getNameSpace(),
152 *CM_Instance(ci),
153 CM_IncludeQualifiers(flgs),
154 CIMPropertyList());
155 CMReturn(CMPI_RC_OK);
156 }
157 catch (CIMException &e) {
158 DDD(cout<<"### exception: mbSetInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
159 CMReturn((CMPIrc)e.getCode());
160 }
161 CMReturn(CMPI_RC_ERR_FAILED);
162 }
163
164 static CMPIStatus mbDeleteInstance (CMPIBroker *mb, CMPIContext *ctx,
165 CMPIObjectPath *cop) {
166 DDD(cout<<"--- mbDeleteInstance()"<<std::endl);
167 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
168 schuur 1.1 CM_ObjectPath(cop)->getClassName(),
169 CM_ObjectPath(cop)->getKeyBindings());
170
171 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
172 try {
173 CM_CIMOM(mb)->deleteInstance(
174 OperationContext(*CM_Context(ctx)),
175 CM_ObjectPath(cop)->getNameSpace(),
176 qop); //*CM_ObjectPath(cop));
177 CMReturn(CMPI_RC_OK);
178 }
179 catch (CIMException &e) {
180 DDD(cout<<"### exception: mbDeleteInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
181 CMReturn((CMPIrc)e.getCode());
182 }
183 CMReturn(CMPI_RC_ERROR);
184 }
185
186 static CMPIEnumeration* mbExecQuery(CMPIBroker *mb, CMPIContext *ctx,
187 CMPIObjectPath *cop, char *query, char *lang, CMPIStatus *rc) {
188 DDD(cout<<"--- mbExecQuery()"<<std::endl);
189 schuur 1.1
190 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
191 try {
192 Array<CIMObject> const &en=CM_CIMOM(mb)->execQuery(
193 OperationContext(*CM_Context(ctx)),
194 CM_ObjectPath(cop)->getNameSpace(),
195 String(query),
196 String(lang));
197 if (rc) CMSetStatus(rc,CMPI_RC_OK);
198 return new CMPI_ObjEnumeration(new Array<CIMObject>(en));
199 }
200 catch (CIMException &e) {
201 DDD(cout<<"### exception: mbExecQuery - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
202 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
203 }
204 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
205 return NULL;
206 }
207
208 static CMPIEnumeration* mbEnumInstances(CMPIBroker *mb, CMPIContext *ctx,
209 CMPIObjectPath *cop, char **properties, CMPIStatus *rc) {
210 schuur 1.1 DDD(cout<<"--- mbEnumInstances()"<<std::endl);
211
212 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
213 CIMPropertyList *props=getList(properties);
214
215 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
216 try {
217 Array<CIMInstance> const &en=CM_CIMOM(mb)->enumerateInstances(
218 OperationContext(*CM_Context(ctx)),
219 CM_ObjectPath(cop)->getNameSpace(),
220 CM_ObjectPath(cop)->getClassName(),
221 CM_DeepInheritance(flgs),
222 CM_LocalOnly(flgs),
223 CM_IncludeQualifiers(flgs),
224 CM_ClassOrigin(flgs),
225 *props);
226 if (rc) CMSetStatus(rc,CMPI_RC_OK);
227 delete props;
228 return new CMPI_InstEnumeration(new Array<CIMInstance>(en));
229 }
230 catch (CIMException &e) {
231 schuur 1.1 DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
232 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
233 }
234 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
235 delete props;
236 return NULL;
237 }
238
239 static CMPIEnumeration* mbEnumInstanceNames(CMPIBroker *mb, CMPIContext *ctx,
240 CMPIObjectPath *cop, CMPIStatus *rc) {
241 DDD(cout<<"--- mbEnumInstanceNames()"<<std::endl);
242
243 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
244 try {
245 Array<CIMObjectPath> const &en=CM_CIMOM(mb)->enumerateInstanceNames(
246 OperationContext(*CM_Context(ctx)),
247 CM_ObjectPath(cop)->getNameSpace(),
248 CM_ObjectPath(cop)->getClassName());
249 if (rc) CMSetStatus(rc,CMPI_RC_OK);
250 return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
251 }
252 schuur 1.1 catch (CIMException &e) {
253 DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
254 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
255 }
256 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
257 return NULL;
258 }
259
260 static CMPIEnumeration* mbAssociators(CMPIBroker *mb, CMPIContext *ctx,
261 CMPIObjectPath *cop, char *assocClass, char *resultClass,
262 char *role, char *resultRole, char **properties, CMPIStatus *rc) {
263 DDD(cout<<"--- mbAssociators()"<<std::endl);
264 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
265 CIMPropertyList *props=getList(properties);
266 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
267 CM_ObjectPath(cop)->getClassName(),
268 CM_ObjectPath(cop)->getKeyBindings());
269
270 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
271 try {
272 Array<CIMObject> const &en=CM_CIMOM(mb)->associators(
273 schuur 1.1 OperationContext(*CM_Context(ctx)),
274 CM_ObjectPath(cop)->getNameSpace(),
275 qop,
276 assocClass ? CIMName(assocClass) : CIMName(),
277 resultClass ? CIMName(resultClass) : CIMName(),
278 role ? String(role) : String::EMPTY,
279 resultRole ? String(resultRole) : String::EMPTY,
280 CM_IncludeQualifiers(flgs),
281 CM_ClassOrigin(flgs),
282 *props);
283 if (rc) CMSetStatus(rc,CMPI_RC_OK);
284 delete props;
285 return new CMPI_ObjEnumeration(new Array<CIMObject>(en));
286 }
287 catch (CIMException &e) {
288 DDD(cout<<"### exception: mbAssociators - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
289 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
290 }
291 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
292 delete props;
293 return NULL;
294 schuur 1.1 }
295
296 static CMPIEnumeration* mbAssociatorNames(CMPIBroker *mb, CMPIContext *ctx,
297 CMPIObjectPath *cop, char *assocClass, char *resultClass,
298 char *role, char *resultRole, CMPIStatus *rc) {
299 DDD(cout<<"--- mbAssociatorsNames()"<<std::endl);
300 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
301 CM_ObjectPath(cop)->getClassName(),
302 CM_ObjectPath(cop)->getKeyBindings());
303
304 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
305 try {
306 Array<CIMObjectPath> const &en=CM_CIMOM(mb)->associatorNames(
307 OperationContext(*CM_Context(ctx)),
308 CM_ObjectPath(cop)->getNameSpace(),
309 qop,
310 assocClass ? CIMName(assocClass) : CIMName(),
311 resultClass ? CIMName(resultClass) : CIMName(),
312 role ? String(role) : String::EMPTY,
313 resultRole ? String(resultRole) : String::EMPTY);
314 if (rc) CMSetStatus(rc,CMPI_RC_OK);
315 schuur 1.1 return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
316 }
317 catch (CIMException &e) {
318 DDD(cout<<"### exception: mbAssociatorsNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
319 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
320 }
321 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
322 return NULL;
323 }
324
325 static CMPIEnumeration* mbReferences(CMPIBroker *mb, CMPIContext *ctx,
326 CMPIObjectPath *cop, char *resultClass, char *role ,
327 char **properties, CMPIStatus *rc) {
328 DDD(cout<<"--- mbReferences()"<<std::endl);
329 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
330 CIMPropertyList *props=getList(properties);
331 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
332 CM_ObjectPath(cop)->getClassName(),
333 CM_ObjectPath(cop)->getKeyBindings());
334
335 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
336 schuur 1.1 try {
337 Array<CIMObject> const &en=CM_CIMOM(mb)->references(
338 OperationContext(*CM_Context(ctx)),
339 CM_ObjectPath(cop)->getNameSpace(),
340 qop,
341 resultClass ? CIMName(resultClass) : CIMName(),
342 role ? String(role) : String::EMPTY,
343 CM_IncludeQualifiers(flgs),
344 CM_ClassOrigin(flgs),
345 *props);
346 if (rc) CMSetStatus(rc,CMPI_RC_OK);
347 delete props;
348 return new CMPI_ObjEnumeration(new Array<CIMObject>(en));
349 }
350 catch (CIMException &e) {
351 DDD(cout<<"### exception: mbReferences - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
352 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
353 }
354 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
355 delete props;
356 return NULL;
357 schuur 1.1 }
358
359 static CMPIEnumeration* mbReferenceNames(CMPIBroker *mb, CMPIContext *ctx,
360 CMPIObjectPath *cop, char *resultClass, char *role,
361 CMPIStatus *rc) {
362 DDD(cout<<"--- mbReferencesNames()"<<std::endl);
363 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
364 CM_ObjectPath(cop)->getClassName(),
365 CM_ObjectPath(cop)->getKeyBindings());
366
367 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
368 try {
369 Array<CIMObjectPath> const &en=CM_CIMOM(mb)->referenceNames(
370 OperationContext(*CM_Context(ctx)),
371 CM_ObjectPath(cop)->getNameSpace(),
372 qop,
373 resultClass ? CIMName(resultClass) : CIMName(),
374 role ? String(role) : String::EMPTY);
375 if (rc) CMSetStatus(rc,CMPI_RC_OK);
376 return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
377 }
378 schuur 1.1 catch (CIMException &e) {
379 DDD(cout<<"### exception: mbReferencesNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
380 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
381 }
382 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
383 return NULL;
384 }
385
386 static CMPIData mbInvokeMethod(CMPIBroker *mb, CMPIContext *ctx,
387 CMPIObjectPath *cop, char *method, CMPIArgs *in, CMPIArgs *out,
388 CMPIStatus *rc) {
389 CMPIData data={0,0,{0}};
390 if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_SUPPORTED);
391 return data;
392 }
393
394 static CMPIStatus mbSetProperty(CMPIBroker *mb, CMPIContext *ctx,
395 CMPIObjectPath *cop, char *name, CMPIValue *val,
396 CMPIType type) {
397 DDD(cout<<"--- mbSetProperty()"<<std::endl);
398 CMPIrc rc;
399 schuur 1.1 CIMValue v=value2CIMValue(val,type,&rc);
400
401 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
402 try {
403 CM_CIMOM(mb)->setProperty(
404 OperationContext(*CM_Context(ctx)),
405 CM_ObjectPath(cop)->getNameSpace(),
406 *CM_ObjectPath(cop),
407 String(name),
408 v);
409 CMReturn(CMPI_RC_OK);
410 }
411 catch (CIMException &e) {
412 DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
413 CMReturn((CMPIrc)e.getCode());
414 }
415 CMReturn(CMPI_RC_ERR_FAILED);
416 }
417
418 static CMPIData mbGetProperty(CMPIBroker *mb, CMPIContext *ctx,
419 CMPIObjectPath *cop,char *name, CMPIStatus *rc) {
420 schuur 1.1 DDD(cout<<"--- mbGetProperty()"<<std::endl);
421 CMPIData data={0,0,{0}};
422
423 AutoMutex mtx(&((CMPI_Broker*)mb)->mtx);
424 try {
425 CIMValue v=CM_CIMOM(mb)->getProperty(
426 OperationContext(*CM_Context(ctx)),
427 CM_ObjectPath(cop)->getNameSpace(),
428 *CM_ObjectPath(cop),
429 String(name));
430 CIMType vType=v.getType();
431 CMPIType t=type2CMPIType(vType,v.isArray());
432 value2CMPIData(v,t,&data);
433 if (rc) CMSetStatus(rc,CMPI_RC_OK);
434 return data;
435 }
436 catch (CIMException &e) {
437 DDD(cout<<"### exception: mbGetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<std::endl);
438 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
439 }
440 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
441 schuur 1.1 return data;
442 }
443
444 static CMPIContext* mbPrepareAttachThread(CMPIBroker* mb, CMPIContext* eCtx) {
445 DDD(cout<<"--- mbPrepareAttachThread()"<<std::endl);
446 OperationContext *ctx=(OperationContext*)((CMPI_Context*)eCtx)->ctx;
447 OperationContext nctx=*ctx;
448 CMPIContext* neCtx=new CMPI_Context(*(new OperationContext(nctx)));
449 CMPIString *name;
450 for (int i=0,s=CMPI_Args_Ftab->getArgCount((CMPIArgs*)eCtx,NULL); i<s; i++) {
451 CMPIData data=CMPI_Args_Ftab->getArgAt((CMPIArgs*)eCtx,i,&name,NULL);
452 CMPI_Args_Ftab->addArg((CMPIArgs*)neCtx,CMGetCharPtr(name),&data.value,data.type);
453 }
454 return neCtx;
455 }
456
457 static CMPIStatus mbAttachThread(CMPIBroker* mb, CMPIContext* eCtx) {
458 DDD(cout<<"--- mbAttachThread()"<<std::endl);
459 ((CMPI_Context*)eCtx)->thr=new CMPI_ThreadContext(mb,eCtx);
460 CMReturn(CMPI_RC_OK);
461 }
462 schuur 1.1
463 static CMPIStatus mbDetachThread(CMPIBroker* mb, CMPIContext* eCtx) {
464 DDD(cout<<"--- mbDetachThread()"<<std::endl);
465 delete ((CMPI_Context*)eCtx)->thr;
466 CMReturn(CMPI_RC_OK);
467 }
468
469 static CMPIStatus mbDeliverIndication(CMPIBroker* eMb, CMPIContext* eCtx,
470 char* ns, CMPIInstance* ind) {
471 DDD(cout<<"--- mbDeliverIndication()"<<std::endl);
472 CMPI_Broker *mb=(CMPI_Broker*)eMb;
473 CMPIProviderManager::indProvRecord *prec;
474
475 if (CMPIProviderManager::provTab.lookup(mb->name,prec)) {
476 if (prec->enabled) {
477 CIMIndication cimIndication(*CM_Instance(ind));
478 prec->handler->deliver(cimIndication);
479 CMReturn(CMPI_RC_OK);
480 }
481 }
482 CMReturn(CMPI_RC_ERR_FAILED);
483 schuur 1.1 }
484
485 static CMPIBrokerFT broker_FT={
486 0, // brokerClassification;
487 CMPICurrentVersion,
488 "Pegasus",
489 mbPrepareAttachThread,
490 mbAttachThread,
491 mbDetachThread,
492 mbDeliverIndication,
493 mbEnumInstanceNames,
494 mbGetInstance,
495 mbCreateInstance,
496 mbSetInstance,
497 mbDeleteInstance,
498 mbExecQuery,
499 mbEnumInstances,
500 mbAssociators,
501 mbAssociatorNames,
502 mbReferences,
503 mbReferenceNames,
504 schuur 1.1 mbInvokeMethod,
505 mbSetProperty,
506 mbGetProperty,
507 };
508
509 CMPIBrokerFT *CMPI_Broker_Ftab=& broker_FT;
510
511 PEGASUS_NAMESPACE_END
512
513
|