1 schuur 1.1 //%2003////////////////////////////////////////////////////////////////////////
2 //
3 // 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 // IBM Corp.; EMC Corporation, The Open Group.
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to
10 // deal in the Software without restriction, including without limitation the
11 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12 // sell copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
16 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
17 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
18 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
19 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 schuur 1.1 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 //
24 //==============================================================================
25 //
26 // Author: Adrian Schuur, schuur@de.ibm.com
27 //
28 // Modified By:
29 //
30 //%/////////////////////////////////////////////////////////////////////////////
31
|
32 schuur 1.5.2.1 #include "CMPI_Version.h"
|
33 schuur 1.3
|
34 schuur 1.1 #include "CMPI_Broker.h"
35 #include "CMPI_Object.h"
36 #include "CMPI_ContextArgs.h"
37 #include "CMPI_Enumeration.h"
38 #include "CMPI_Value.h"
39 #include "CMPIProviderManager.h"
40
41 #include <Pegasus/Common/CIMName.h>
42 #include <Pegasus/Common/CIMPropertyList.h>
43 #include <Pegasus/Provider/CIMOMHandle.h>
44 #include <Pegasus/Common/CIMValue.h>
45 #include <Pegasus/Common/CIMType.h>
46
47
48 PEGASUS_USING_STD;
49 PEGASUS_NAMESPACE_BEGIN
50
51 #define DDD(X) if (_cmpi_trace) X;
52
53 extern int _cmpi_trace;
54
55 schuur 1.1 CIMPropertyList *getList(char** l) {
56 return new CIMPropertyList;
57 }
58
59 CIMClass* mbGetClass(CMPIBroker *mb, const CIMObjectPath &cop) {
|
60 schuur 1.4 DDD(cout<<"--- mbGetClass()"<<endl);
|
61 schuur 1.1 CMPI_Broker *xBroker=(CMPI_Broker*)mb;
|
62 schuur 1.3 String clsId=cop.getNameSpace().getString()+":"+cop.getClassName().getString();
|
63 schuur 1.1 CIMClass *ccp;
64
|
65 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
66 schuur 1.1 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 catch (CIMException &e) {
|
85 schuur 1.4 DDD(cout<<"### exception: mbGetClass - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
86 schuur 1.1 }
87 return NULL;
88 }
89
90 static CMPIInstance* mbGetInstance(CMPIBroker *mb, CMPIContext *ctx,
91 CMPIObjectPath *cop, char **properties, CMPIStatus *rc) {
|
92 schuur 1.4 DDD(cout<<"--- mbGetInstance()"<<endl);
|
93 schuur 1.1 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 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
100 schuur 1.1 try {
101 CIMInstance ci=CM_CIMOM(mb)->getInstance(
102 OperationContext(*CM_Context(ctx)),
103 CM_ObjectPath(cop)->getNameSpace(),
104 qop, //*CM_ObjectPath(cop),
105 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 schuur 1.4 DDD(cout<<"### exception: mbGetInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
115 schuur 1.1 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 schuur 1.4 DDD(cout<<"--- mbCreateInstance()"<<endl);
|
124 schuur 1.1
|
125 kumpf 1.5 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 schuur 1.4 DDD(cout<<"### exception: mbCreateInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
136 schuur 1.1 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 schuur 1.4 DDD(cout<<"--- mbSetInstance()"<<endl);
|
145 schuur 1.1 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
146
|
147 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
148 schuur 1.1 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 schuur 1.4 DDD(cout<<"### exception: mbSetInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
159 schuur 1.1 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 schuur 1.4 DDD(cout<<"--- mbDeleteInstance()"<<endl);
|
167 schuur 1.1 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
168 CM_ObjectPath(cop)->getClassName(),
169 CM_ObjectPath(cop)->getKeyBindings());
170
|
171 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
172 schuur 1.1 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 schuur 1.4 DDD(cout<<"### exception: mbDeleteInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
181 schuur 1.1 CMReturn((CMPIrc)e.getCode());
182 }
183 CMReturn(CMPI_RC_ERROR);
184 }
185
186 static CMPIEnumeration* mbExecQuery(CMPIBroker *mb, CMPIContext *ctx,
|
187 schuur 1.5.2.1 CMPIObjectPath *cop, const char *query, const char *lang, CMPIStatus *rc) {
|
188 schuur 1.4 DDD(cout<<"--- mbExecQuery()"<<endl);
|
189 schuur 1.1
|
190 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
191 schuur 1.1 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 schuur 1.4 DDD(cout<<"### exception: mbExecQuery - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
202 schuur 1.1 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.4 DDD(cout<<"--- mbEnumInstances()"<<endl);
|
211 schuur 1.1
212 CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
213 CIMPropertyList *props=getList(properties);
214
|
215 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
216 schuur 1.1 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.4 DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
232 schuur 1.1 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 schuur 1.4 DDD(cout<<"--- mbEnumInstanceNames()"<<endl);
|
242 schuur 1.1
|
243 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
244 schuur 1.1 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 catch (CIMException &e) {
|
253 schuur 1.4 DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
254 schuur 1.1 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 schuur 1.5.2.1 CMPIObjectPath *cop, const char *assocClass, const char *resultClass,
262 const char *role, const char *resultRole, char **properties, CMPIStatus *rc) {
|
263 schuur 1.4 DDD(cout<<"--- mbAssociators()"<<endl);
|
264 schuur 1.1 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 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
271 schuur 1.1 try {
272 Array<CIMObject> const &en=CM_CIMOM(mb)->associators(
273 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 schuur 1.4 DDD(cout<<"### exception: mbAssociators - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
289 schuur 1.1 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
290 }
291 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
292 delete props;
293 return NULL;
294 }
295
296 static CMPIEnumeration* mbAssociatorNames(CMPIBroker *mb, CMPIContext *ctx,
|
297 schuur 1.5.2.1 CMPIObjectPath *cop, const char *assocClass, const char *resultClass,
298 const char *role, const char *resultRole, CMPIStatus *rc) {
|
299 schuur 1.4 DDD(cout<<"--- mbAssociatorsNames()"<<endl);
|
300 schuur 1.1 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
301 CM_ObjectPath(cop)->getClassName(),
302 CM_ObjectPath(cop)->getKeyBindings());
303
|
304 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
305 schuur 1.1 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 return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
316 }
317 catch (CIMException &e) {
|
318 schuur 1.4 DDD(cout<<"### exception: mbAssociatorsNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
319 schuur 1.1 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 schuur 1.5.2.1 CMPIObjectPath *cop, const char *resultClass, const char *role ,
|
327 schuur 1.1 char **properties, CMPIStatus *rc) {
|
328 schuur 1.4 DDD(cout<<"--- mbReferences()"<<endl);
|
329 schuur 1.1 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 kumpf 1.5 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 schuur 1.4 DDD(cout<<"### exception: mbReferences - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
352 schuur 1.1 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
353 }
354 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
355 delete props;
356 return NULL;
357 }
358
359 static CMPIEnumeration* mbReferenceNames(CMPIBroker *mb, CMPIContext *ctx,
|
360 schuur 1.5.2.1 CMPIObjectPath *cop, const char *resultClass, const char *role,
|
361 schuur 1.1 CMPIStatus *rc) {
|
362 schuur 1.4 DDD(cout<<"--- mbReferencesNames()"<<endl);
|
363 schuur 1.1 CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
364 CM_ObjectPath(cop)->getClassName(),
365 CM_ObjectPath(cop)->getKeyBindings());
366
|
367 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
368 schuur 1.1 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 catch (CIMException &e) {
|
379 schuur 1.4 DDD(cout<<"### exception: mbReferencesNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
380 schuur 1.1 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 schuur 1.5.2.1 CMPIObjectPath *cop, const char *method, CMPIArgs *in, CMPIArgs *out,
|
388 schuur 1.1 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 schuur 1.5.2.1 CMPIObjectPath *cop, const char *name, CMPIValue *val,
|
396 schuur 1.1 CMPIType type) {
|
397 schuur 1.4 DDD(cout<<"--- mbSetProperty()"<<endl);
|
398 schuur 1.1 CMPIrc rc;
399 CIMValue v=value2CIMValue(val,type,&rc);
400
|
401 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
402 schuur 1.1 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 schuur 1.4 DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
413 schuur 1.1 CMReturn((CMPIrc)e.getCode());
414 }
415 CMReturn(CMPI_RC_ERR_FAILED);
416 }
417
418 static CMPIData mbGetProperty(CMPIBroker *mb, CMPIContext *ctx,
|
419 schuur 1.5.2.1 CMPIObjectPath *cop, const char *name, CMPIStatus *rc) {
|
420 schuur 1.4 DDD(cout<<"--- mbGetProperty()"<<endl);
|
421 schuur 1.1 CMPIData data={0,0,{0}};
422
|
423 kumpf 1.5 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
|
424 schuur 1.1 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 schuur 1.4 DDD(cout<<"### exception: mbGetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
|
438 schuur 1.1 if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
439 }
440 if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
441 return data;
442 }
443
444 static CMPIContext* mbPrepareAttachThread(CMPIBroker* mb, CMPIContext* eCtx) {
|
445 schuur 1.4 DDD(cout<<"--- mbPrepareAttachThread()"<<endl);
|
446 schuur 1.1 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 schuur 1.4 DDD(cout<<"--- mbAttachThread()"<<endl);
|
459 schuur 1.1 ((CMPI_Context*)eCtx)->thr=new CMPI_ThreadContext(mb,eCtx);
460 CMReturn(CMPI_RC_OK);
461 }
462
463 static CMPIStatus mbDetachThread(CMPIBroker* mb, CMPIContext* eCtx) {
|
464 schuur 1.4 DDD(cout<<"--- mbDetachThread()"<<endl);
|
465 schuur 1.1 delete ((CMPI_Context*)eCtx)->thr;
466 CMReturn(CMPI_RC_OK);
467 }
468
|
469 schuur 1.5.2.1 static CMPIStatus mbDeliverIndication(CMPIBroker* eMb, CMPIContext* ctx,
470 const char *ns, CMPIInstance* ind) {
|
471 schuur 1.4 DDD(cout<<"--- mbDeliverIndication()"<<endl);
|
472 schuur 1.1 CMPI_Broker *mb=(CMPI_Broker*)eMb;
473 CMPIProviderManager::indProvRecord *prec;
|
474 schuur 1.5.2.1 OperationContext* context=CM_Context(ctx);
|
475 schuur 1.1
476 if (CMPIProviderManager::provTab.lookup(mb->name,prec)) {
477 if (prec->enabled) {
|
478 schuur 1.5.2.1 try {
479 context->get(SubscriptionInstanceNamesContainer::NAME);
480 }
481 catch (Exception& e) {
482 Array<CIMObjectPath> subscriptionInstanceNames;
483 context->insert(SubscriptionInstanceNamesContainer(subscriptionInstanceNames));
484 }
|
485 schuur 1.1 CIMIndication cimIndication(*CM_Instance(ind));
|
486 schuur 1.5.2.1 AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
487 try {
488 prec->handler->deliver(
489 *context,
490 // OperationContext(*CM_Context(ctx)),
491 cimIndication);
|
492 schuur 1.1 CMReturn(CMPI_RC_OK);
493 }
|
494 schuur 1.5.2.1 catch (CIMException &e) {
495 DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
496 CMReturn((CMPIrc)e.getCode());
497 }
498 }
|
499 schuur 1.1 }
500 CMReturn(CMPI_RC_ERR_FAILED);
501 }
502
503 static CMPIBrokerFT broker_FT={
504 0, // brokerClassification;
505 CMPICurrentVersion,
506 "Pegasus",
507 mbPrepareAttachThread,
508 mbAttachThread,
509 mbDetachThread,
510 mbDeliverIndication,
511 mbEnumInstanceNames,
512 mbGetInstance,
513 mbCreateInstance,
514 mbSetInstance,
515 mbDeleteInstance,
516 mbExecQuery,
517 mbEnumInstances,
518 mbAssociators,
519 mbAssociatorNames,
520 schuur 1.1 mbReferences,
521 mbReferenceNames,
522 mbInvokeMethod,
523 mbSetProperty,
524 mbGetProperty,
525 };
526
527 CMPIBrokerFT *CMPI_Broker_Ftab=& broker_FT;
528
529 PEGASUS_NAMESPACE_END
530
531
|