(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.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                

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2