(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.3 #define CMPI_VER_86 1
 33            
 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               DDD(cout<<"--- mbGetClass()"<<std::endl);
 61               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               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            

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2