(file) Return to CMPI_Broker.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / CMPI

  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.6 #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                             CMPIObjectPath *cop, char *query, 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                             CMPIObjectPath *cop, char *assocClass, char *resultClass,
262                             char *role, 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                             CMPIObjectPath *cop, char *assocClass, char *resultClass,
298            		 char *role, 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                             CMPIObjectPath *cop,  char *resultClass, char *role ,
327            		 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                             CMPIObjectPath *cop, char *resultClass, char *role,
361                             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                             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 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                             CMPIObjectPath *cop,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            static CMPIStatus mbDeliverIndication(CMPIBroker* eMb, CMPIContext* eCtx,
470                         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               
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            }	     
484            
485            static CMPIBrokerFT broker_FT={
486                 0, // brokerClassification;
487                 CMPICurrentVersion,
488                 "Pegasus",
489                 mbPrepareAttachThread,
490                 mbAttachThread,
491                 mbDetachThread,
492                 mbDeliverIndication,
493 schuur 1.1      mbEnumInstanceNames,
494                 mbGetInstance,
495                 mbCreateInstance,
496                 mbSetInstance,
497                 mbDeleteInstance,
498                 mbExecQuery,
499                 mbEnumInstances,
500                 mbAssociators,
501                 mbAssociatorNames,
502                 mbReferences,
503                 mbReferenceNames,
504                 mbInvokeMethod,
505                 mbSetProperty,
506                 mbGetProperty,
507            };
508            
509            CMPIBrokerFT *CMPI_Broker_Ftab=& broker_FT;
510            
511            PEGASUS_NAMESPACE_END
512            
513            

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2