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

  1 karl  1.15 //%2005////////////////////////////////////////////////////////////////////////
  2 schuur 1.1  //
  3 karl   1.12 // 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 schuur 1.1  // IBM Corp.; EMC Corporation, The Open Group.
  7 karl   1.12 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
  8             // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
  9 karl   1.15 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10             // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11 schuur 1.1  //
 12             // Permission is hereby granted, free of charge, to any person obtaining a copy
 13             // of this software and associated documentation files (the "Software"), to
 14             // deal in the Software without restriction, including without limitation the
 15             // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 16             // sell copies of the Software, and to permit persons to whom the Software is
 17             // furnished to do so, subject to the following conditions:
 18 r.kieninger 1.16 //
 19 schuur      1.1  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 20                  // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 21                  // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 22                  // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 23                  // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 24                  // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 25                  // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 26                  // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 27                  //
 28                  //==============================================================================
 29                  //
 30                  // Author:      Adrian Schuur, schuur@de.ibm.com
 31                  //
 32 r.kieninger 1.16 // Modified By: Robert Kieninger, kieningr@de.ibm.com, for bug#2642
 33 schuur      1.1  //
 34                  //%/////////////////////////////////////////////////////////////////////////////
 35                  
 36 schuur      1.6  #include "CMPI_Version.h"
 37 schuur      1.3  
 38 schuur      1.1  #include "CMPI_Broker.h"
 39                  #include "CMPI_Object.h"
 40                  #include "CMPI_ContextArgs.h"
 41                  #include "CMPI_Enumeration.h"
 42                  #include "CMPI_Value.h"
 43                  #include "CMPIProviderManager.h"
 44 schuur      1.9  #include "CMPI_String.h"
 45 schuur      1.1  
 46                  #include <Pegasus/Common/CIMName.h>
 47                  #include <Pegasus/Common/CIMPropertyList.h>
 48                  #include <Pegasus/Provider/CIMOMHandle.h>
 49                  #include <Pegasus/Common/CIMValue.h>
 50                  #include <Pegasus/Common/CIMType.h>
 51                  
 52                  
 53                  PEGASUS_USING_STD;
 54                  PEGASUS_NAMESPACE_BEGIN
 55                  
 56                  #define DDD(X)   if (_cmpi_trace) X;
 57                  
 58                  extern int _cmpi_trace;
 59                  
 60 konrad.r    1.20 static CIMPropertyList getList(const char** l) {
 61 schuur      1.10   CIMPropertyList pl;
 62                    if (l) {
 63                      Array<CIMName> n;
 64                      while (*l) {
 65                        n.append(*l++);
 66                      }
 67                      pl.set(n);
 68                    }
 69                    return pl;
 70 schuur      1.1  }
 71                  
 72 konrad.r    1.20 CIMClass* mbGetClass(const CMPIBroker *mb, const CIMObjectPath &cop) {
 73 schuur      1.4     DDD(cout<<"--- mbGetClass()"<<endl);
 74 schuur      1.10    mb=CM_BROKER;
 75 schuur      1.1     CMPI_Broker *xBroker=(CMPI_Broker*)mb;
 76 schuur      1.3     String clsId=cop.getNameSpace().getString()+":"+cop.getClassName().getString();
 77 schuur      1.1     CIMClass *ccp;
 78                  
 79 kumpf       1.5     AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
 80 schuur      1.1     if (xBroker->clsCache) {
 81                        if (xBroker->clsCache->lookup(clsId,ccp)) return ccp;
 82                     }
 83                     else xBroker->clsCache=new ClassCache();
 84                  
 85                     try {
 86                        CIMClass cc=CM_CIMOM(mb)->getClass(
 87                                    OperationContext(),
 88                  		  cop.getNameSpace(),
 89                  		  cop.getClassName(),
 90                  		  (bool)0,
 91                  		  (bool)1,
 92                  		  (bool)0,
 93                  		  CIMPropertyList());
 94                        ccp=new CIMClass(cc);
 95                        xBroker->clsCache->insert(clsId,ccp);
 96                        return ccp;
 97                     }
 98 konrad.r    1.20    catch (const CIMException &e) {
 99 schuur      1.4        DDD(cout<<"### exception: mbGetClass - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
100 schuur      1.1     }
101                     return NULL;
102                  }
103                  
104 schuur      1.11 extern "C" {
105 schuur      1.1  
106 konrad.r    1.20    static CMPIInstance* mbGetInstance(const CMPIBroker *mb, const CMPIContext *ctx,
107                                    const CMPIObjectPath *cop, const char **properties, CMPIStatus *rc) {
108 schuur      1.11       DDD(cout<<"--- mbGetInstance()"<<endl);
109                        mb=CM_BROKER;
110                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
111 konrad.r    1.20       const CIMPropertyList props=getList(properties);
112 schuur      1.11       CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
113                                          CM_ObjectPath(cop)->getClassName(),
114                              CM_ObjectPath(cop)->getKeyBindings());
115                  
116                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
117                        try {
118                           CIMInstance ci=CM_CIMOM(mb)->getInstance(
119                                       OperationContext(*CM_Context(ctx)),
120                           CM_ObjectPath(cop)->getNameSpace(),
121                           qop, //*CM_ObjectPath(cop),
122                           CM_LocalOnly(flgs),
123                           CM_IncludeQualifiers(flgs),
124                           CM_ClassOrigin(flgs),
125                           props);
126 r.kieninger 1.18          ci.setPath(*CM_ObjectPath(cop));
127 schuur      1.11          if (rc) CMSetStatus(rc,CMPI_RC_OK);
128                           return (CMPIInstance*)new CMPI_Object(new CIMInstance(ci));
129                        }
130 konrad.r    1.20       catch (const CIMException &e) {
131 schuur      1.11          DDD(cout<<"### exception: mbGetInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
132                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
133                              (CMPIString*)string2CMPIString(e.getMessage()));
134                           return NULL;
135                        }
136                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-0");
137                        return NULL;
138 schuur      1.1     }
139 schuur      1.11 
140 konrad.r    1.20    static CMPIObjectPath* mbCreateInstance(const CMPIBroker *mb, const CMPIContext *ctx,
141                                    const CMPIObjectPath *cop, const CMPIInstance *ci, CMPIStatus *rc) {
142 schuur      1.11       DDD(cout<<"--- mbCreateInstance()"<<endl);
143                        mb=CM_BROKER;
144                  
145                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
146                        try {
147                           CIMObjectPath ncop=CM_CIMOM(mb)->createInstance(
148                                       OperationContext(*CM_Context(ctx)),
149                           CM_ObjectPath(cop)->getNameSpace(),
150                                       *CM_Instance(ci));
151                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
152                           return (CMPIObjectPath*)new CMPI_Object(new CIMObjectPath(ncop));
153                        }
154 konrad.r    1.20       catch (const CIMException &e) {
155 schuur      1.11          DDD(cout<<"### exception: mbCreateInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
156                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
157                              (CMPIString*)string2CMPIString(e.getMessage()));
158                           return NULL;
159                        }
160                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-1");
161 schuur      1.9        return NULL;
162 schuur      1.1     }
163                  
164 konrad.r    1.20    static CMPIStatus mbModifyInstance(const CMPIBroker *mb, const CMPIContext *ctx,
165                           const CMPIObjectPath *cop, const CMPIInstance *ci,const  char ** properties) {
166 schuur      1.11       DDD(cout<<"--- mbSetInstance()"<<endl);
167                        mb=CM_BROKER;
168                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
169 konrad.r    1.20       const CIMPropertyList props=getList(properties);
170 schuur      1.11 
171                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
172                        try {
173 marek       1.14    	 CIMInstance cmi(*CM_Instance(ci));
174                  	 cmi.setPath(*CM_ObjectPath(cop));
175 schuur      1.11          CM_CIMOM(mb)->modifyInstance(
176                                       OperationContext(*CM_Context(ctx)),
177 marek       1.14 		     CM_ObjectPath(cop)->getNameSpace(),
178                                       cmi,
179 schuur      1.11          CM_IncludeQualifiers(flgs),
180                           props);
181                           CMReturn(CMPI_RC_OK);
182                        }
183 konrad.r    1.20       catch (const CIMException &e) {
184 schuur      1.11          DDD(cout<<"### exception: mbSetInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
185                           CMReturnWithString((CMPIrc)e.getCode(),
186                              (CMPIString*)string2CMPIString(e.getMessage()));
187                        }
188                        CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-2");
189 schuur      1.1     }
190                  
191 konrad.r    1.20    static CMPIStatus mbDeleteInstance (const CMPIBroker *mb, const CMPIContext *ctx,
192                                    const CMPIObjectPath *cop) {
193 schuur      1.11       DDD(cout<<"--- mbDeleteInstance()"<<endl);
194                        mb=CM_BROKER;
195                        CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
196                                          CM_ObjectPath(cop)->getClassName(),
197                              CM_ObjectPath(cop)->getKeyBindings());
198                  
199                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
200                        try {
201                           CM_CIMOM(mb)->deleteInstance(
202                                       OperationContext(*CM_Context(ctx)),
203                           CM_ObjectPath(cop)->getNameSpace(),
204                           qop); //*CM_ObjectPath(cop));
205                           CMReturn(CMPI_RC_OK);
206                        }
207 konrad.r    1.20       catch (const CIMException &e) {
208 schuur      1.11          DDD(cout<<"### exception: mbDeleteInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
209                           CMReturnWithString((CMPIrc)e.getCode(),
210                              (CMPIString*)string2CMPIString(e.getMessage()));
211                        }
212                        CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-3");
213 schuur      1.1     }
214                  
215 konrad.r    1.20    static CMPIEnumeration* mbExecQuery(const CMPIBroker *mb, 
216                  				       const CMPIContext *ctx,
217                  				       const CMPIObjectPath *cop, 
218                  				       const char *query, const char *lang, CMPIStatus *rc) {
219 schuur      1.11       DDD(cout<<"--- mbExecQuery()"<<endl);
220                        mb=CM_BROKER;
221                  
222                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
223                        try {
224                           Array<CIMObject> const &en=CM_CIMOM(mb)->execQuery(
225                                       OperationContext(*CM_Context(ctx)),
226                           CM_ObjectPath(cop)->getNameSpace(),
227                           String(query),
228                           String(lang));
229                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
230 r.kieninger 1.19          CMPI_Object *obj =
231                               new CMPI_Object(new CMPI_ObjEnumeration(new Array<CIMObject>(en)));
232                           return (CMPI_ObjEnumeration *)obj->getHdl();
233                  
234 schuur      1.11       }
235 konrad.r    1.20       catch (const CIMException &e) {
236 schuur      1.11          DDD(cout<<"### exception: mbExecQuery - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
237                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
238                              (CMPIString*)string2CMPIString(e.getMessage()));
239                        }
240                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERR_FAILED,"Internal error - CMPIBoker.cpp-4");
241                        return NULL;
242 schuur      1.1     }
243                  
244 konrad.r    1.20    static CMPIEnumeration* mbEnumInstances(const CMPIBroker *mb, const CMPIContext *ctx,
245                                    const CMPIObjectPath *cop, const char **properties, CMPIStatus *rc) {
246 schuur      1.11       DDD(cout<<"--- mbEnumInstances()"<<endl);
247                        mb=CM_BROKER;
248                  
249                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
250 konrad.r    1.20       const CIMPropertyList props=getList(properties);
251 schuur      1.11 
252                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
253                        try {
254                           Array<CIMInstance> const &en=CM_CIMOM(mb)->enumerateInstances(
255                                       OperationContext(*CM_Context(ctx)),
256                           CM_ObjectPath(cop)->getNameSpace(),
257                           CM_ObjectPath(cop)->getClassName(),
258                           CM_DeepInheritance(flgs),
259                           CM_LocalOnly(flgs),
260                           CM_IncludeQualifiers(flgs),
261                           CM_ClassOrigin(flgs),
262                           props);
263                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
264 r.kieninger 1.19          CMPI_Object *obj =
265                               new CMPI_Object(new CMPI_InstEnumeration(new Array<CIMInstance>(en)));
266                           return (CMPI_InstEnumeration*)obj->getHdl();
267                  
268 schuur      1.11       }
269 konrad.r    1.20       catch (const CIMException &e) {
270 schuur      1.11          DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
271                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
272                              (CMPIString*)string2CMPIString(e.getMessage()));
273                           return NULL;
274                        }
275                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-5");
276                        return NULL;
277 schuur      1.1     }
278                  
279 konrad.r    1.20    static CMPIEnumeration* mbEnumInstanceNames(const CMPIBroker *mb, const CMPIContext *ctx,
280                                    const CMPIObjectPath *cop, CMPIStatus *rc) {
281 schuur      1.11       DDD(cout<<"--- mbEnumInstanceNames()"<<endl);
282                        mb=CM_BROKER;
283                  
284                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
285                     try {
286                           Array<CIMObjectPath> const &en=CM_CIMOM(mb)->enumerateInstanceNames(
287                                       OperationContext(*CM_Context(ctx)),
288                           CM_ObjectPath(cop)->getNameSpace(),
289                           CM_ObjectPath(cop)->getClassName());
290                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
291 r.kieninger 1.19          CMPI_Object *obj =
292                               new CMPI_Object(new CMPI_OpEnumeration(new Array<CIMObjectPath>(en)));
293                           return (CMPI_OpEnumeration *)obj->getHdl();
294                  
295 schuur      1.11       }
296 konrad.r    1.20       catch (const CIMException &e) {
297 schuur      1.11          DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
298                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
299                              (CMPIString*)string2CMPIString(e.getMessage()));
300                        }
301                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-6");
302 schuur      1.9        return NULL;
303 schuur      1.1     }
304                  
305 konrad.r    1.20    static CMPIEnumeration* mbAssociators(const CMPIBroker *mb, const CMPIContext *ctx,
306                                    const CMPIObjectPath *cop, const char *assocClass, const char *resultClass,
307                                    const char *role, const char *resultRole, const char **properties, CMPIStatus *rc) {
308 schuur      1.11       DDD(cout<<"--- mbAssociators()"<<endl);
309                        mb=CM_BROKER;
310                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
311 konrad.r    1.20       const CIMPropertyList props=getList(properties);
312 schuur      1.11       CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
313                                          CM_ObjectPath(cop)->getClassName(),
314                              CM_ObjectPath(cop)->getKeyBindings());
315                  
316                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
317                        try {
318                           Array<CIMObject> const &en=CM_CIMOM(mb)->associators(
319                                       OperationContext(*CM_Context(ctx)),
320                           CM_ObjectPath(cop)->getNameSpace(),
321 r.kieninger 1.16          qop,
322 schuur      1.11          assocClass ? CIMName(assocClass) : CIMName(),
323                           resultClass ? CIMName(resultClass) : CIMName(),
324                           role ? String(role) : String::EMPTY,
325                           resultRole ? String(resultRole) : String::EMPTY,
326                           CM_IncludeQualifiers(flgs),
327                           CM_ClassOrigin(flgs),
328                           props);
329                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
330 r.kieninger 1.19          CMPI_Object *obj =
331                               new CMPI_Object(new CMPI_ObjEnumeration(new Array<CIMObject>(en)));
332                           return (CMPI_ObjEnumeration *)obj->getHdl();
333                  
334 schuur      1.11       }
335 konrad.r    1.20       catch (const CIMException &e) {
336 schuur      1.11          DDD(cout<<"### exception: mbAssociators - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
337                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
338                              (CMPIString*)string2CMPIString(e.getMessage()));
339                           return NULL;
340                        }
341                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-7");
342                        return NULL;
343 schuur      1.1     }
344                  
345 konrad.r    1.20    static CMPIEnumeration* mbAssociatorNames(const CMPIBroker *mb, 
346                  					     const CMPIContext *ctx,
347                  					     const CMPIObjectPath *cop, 
348                  					     const char *assocClass, 
349                  					     const char *resultClass,
350 schuur      1.11          const char *role, const char *resultRole, CMPIStatus *rc) {
351                        DDD(cout<<"--- mbAssociatorsNames()"<<endl);
352                        mb=CM_BROKER;
353                        CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
354                                          CM_ObjectPath(cop)->getClassName(),
355                              CM_ObjectPath(cop)->getKeyBindings());
356                  
357                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
358                        try {
359                           Array<CIMObjectPath> const &en=CM_CIMOM(mb)->associatorNames(
360                           OperationContext(*CM_Context(ctx)),
361                           CM_ObjectPath(cop)->getNameSpace(),
362 r.kieninger 1.16          qop,
363 schuur      1.11          assocClass ? CIMName(assocClass) : CIMName(),
364                           resultClass ? CIMName(resultClass) : CIMName(),
365                           role ? String(role) : String::EMPTY,
366                           resultRole ? String(resultRole) : String::EMPTY);
367                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
368 r.kieninger 1.19          CMPI_Object *obj =
369                               new CMPI_Object(new CMPI_OpEnumeration(new Array<CIMObjectPath>(en)));
370                           return (CMPI_OpEnumeration *)obj->getHdl();
371 schuur      1.11       }
372 konrad.r    1.20       catch (const CIMException &e) {
373 schuur      1.11          DDD(cout<<"### exception: mbAssociatorsNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
374                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
375                              (CMPIString*)string2CMPIString(e.getMessage()));
376                        }
377                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-8");
378 schuur      1.9        return NULL;
379 schuur      1.1     }
380                  
381 konrad.r    1.20    static CMPIEnumeration* mbReferences(const CMPIBroker *mb, const CMPIContext *ctx,
382                                    const CMPIObjectPath *cop,  const char *resultClass, const char *role ,
383                           const char **properties, CMPIStatus *rc) {
384 schuur      1.11       DDD(cout<<"--- mbReferences()"<<endl);
385                        mb=CM_BROKER;
386                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
387                        CIMPropertyList props=getList(properties);
388                        CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
389                                          CM_ObjectPath(cop)->getClassName(),
390                              CM_ObjectPath(cop)->getKeyBindings());
391                  
392                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
393                        try {
394                           Array<CIMObject> const &en=CM_CIMOM(mb)->references(
395                           OperationContext(*CM_Context(ctx)),
396                           CM_ObjectPath(cop)->getNameSpace(),
397                           qop,
398                           resultClass ? CIMName(resultClass) : CIMName(),
399                           role ? String(role) : String::EMPTY,
400                           CM_IncludeQualifiers(flgs),
401                           CM_ClassOrigin(flgs),
402                           props);
403                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
404 r.kieninger 1.19          CMPI_Object *obj =
405                               new CMPI_Object(new CMPI_ObjEnumeration(new Array<CIMObject>(en)));
406                           return (CMPI_ObjEnumeration *)obj->getHdl();
407 schuur      1.11       }
408 konrad.r    1.20       catch (const CIMException &e) {
409 schuur      1.11          DDD(cout<<"### exception: mbReferences - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
410                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
411                              (CMPIString*)string2CMPIString(e.getMessage()));
412                           return NULL;
413                        }
414                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-10");
415                        return NULL;
416 schuur      1.1     }
417                  
418 konrad.r    1.20    static CMPIEnumeration* mbReferenceNames(const CMPIBroker *mb, const CMPIContext *ctx,
419                                    const CMPIObjectPath *cop, const char *resultClass, const char *role,
420 schuur      1.11                   CMPIStatus *rc) {
421                        DDD(cout<<"--- mbReferencesNames()"<<endl);
422                        mb=CM_BROKER;
423                        CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
424                                          CM_ObjectPath(cop)->getClassName(),
425                              CM_ObjectPath(cop)->getKeyBindings());
426                  
427                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
428                        try {
429                           Array<CIMObjectPath> const &en=CM_CIMOM(mb)->referenceNames(
430                           OperationContext(*CM_Context(ctx)),
431                           CM_ObjectPath(cop)->getNameSpace(),
432 r.kieninger 1.16          qop,
433 schuur      1.11          resultClass ? CIMName(resultClass) : CIMName(),
434                           role ? String(role) : String::EMPTY);
435                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
436 r.kieninger 1.19          CMPI_Object *obj =
437                               new CMPI_Object(new CMPI_OpEnumeration(new Array<CIMObjectPath>(en)));
438                           return (CMPI_OpEnumeration *)obj->getHdl();
439 schuur      1.11       }
440 konrad.r    1.20       catch (const CIMException &e) {
441 schuur      1.11          DDD(cout<<"### exception: mbReferencesNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
442                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
443                              (CMPIString*)string2CMPIString(e.getMessage()));
444                        }
445                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-11");
446 schuur      1.9        return NULL;
447 schuur      1.1     }
448                  
449 konrad.r    1.20    static CMPIData mbInvokeMethod(const CMPIBroker *mb, const CMPIContext *ctx,
450                                    const CMPIObjectPath *cop, const char *method, const CMPIArgs *in, CMPIArgs *out,
451 schuur      1.11          CMPIStatus *rc) {
452 konrad.r    1.13       CMPIData data={0,CMPI_nullValue,{0}};
453 schuur      1.11       mb=CM_BROKER;
454                        if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_SUPPORTED);
455                        return data;
456 schuur      1.1     }
457                  
458 konrad.r    1.20    static CMPIStatus mbSetProperty(const CMPIBroker *mb, const CMPIContext *ctx,
459                                    const CMPIObjectPath *cop, const char *name, const CMPIValue *val,
460 konrad.r    1.23                   const CMPIType type) {
461 schuur      1.11       DDD(cout<<"--- mbSetProperty()"<<endl);
462                        mb=CM_BROKER;
463                        CMPIrc rc;
464                        CIMValue v=value2CIMValue(val,type,&rc);
465                  
466                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
467                        try {
468                           CM_CIMOM(mb)->setProperty(
469                           OperationContext(*CM_Context(ctx)),
470                           CM_ObjectPath(cop)->getNameSpace(),
471                           *CM_ObjectPath(cop),
472                           String(name),
473                           v);
474                           CMReturn(CMPI_RC_OK);
475                        }
476 konrad.r    1.20       catch (const CIMException &e) {
477 schuur      1.11          DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
478                           CMReturnWithString((CMPIrc)e.getCode(),
479                              (CMPIString*)string2CMPIString(e.getMessage()));
480                        }
481                        CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-12");
482 schuur      1.1     }
483                  
484 konrad.r    1.20    static CMPIData mbGetProperty(const CMPIBroker *mb, const CMPIContext *ctx,
485                                    const CMPIObjectPath *cop, const char *name, CMPIStatus *rc) {
486 schuur      1.11       DDD(cout<<"--- mbGetProperty()"<<endl);
487                        mb=CM_BROKER;
488 konrad.r    1.13       CMPIData data={0,CMPI_nullValue,{0}};
489 schuur      1.11 
490                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
491                        try {
492                           CIMValue v=CM_CIMOM(mb)->getProperty(
493                           OperationContext(*CM_Context(ctx)),
494                           CM_ObjectPath(cop)->getNameSpace(),
495                           *CM_ObjectPath(cop),
496                           String(name));
497                           CIMType vType=v.getType();
498                           CMPIType t=type2CMPIType(vType,v.isArray());
499                           value2CMPIData(v,t,&data);
500                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
501                           return data;
502                        }
503 konrad.r    1.20       catch (const CIMException &e) {
504 schuur      1.11          DDD(cout<<"### exception: mbGetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
505                           if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
506                        }
507                        if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
508 schuur      1.1        return data;
509                     }
510 schuur      1.11 
511 konrad.r    1.20    static CMPIContext* mbPrepareAttachThread(const CMPIBroker* mb, const CMPIContext* eCtx) {
512 schuur      1.11       DDD(cout<<"--- mbPrepareAttachThread()"<<endl);
513                        mb=CM_BROKER;
514                        OperationContext *ctx=(OperationContext*)((CMPI_Context*)eCtx)->ctx;
515                        OperationContext nctx=*ctx;
516                        CMPIContext* neCtx=new CMPI_Context(*(new OperationContext(nctx)));
517                        CMPIString *name;
518                        for (int i=0,s=CMPI_Args_Ftab->getArgCount((CMPIArgs*)eCtx,NULL); i<s; i++) {
519                           CMPIData data=CMPI_Args_Ftab->getArgAt((CMPIArgs*)eCtx,i,&name,NULL);
520                           CMPI_Args_Ftab->addArg((CMPIArgs*)neCtx,CMGetCharPtr(name),&data.value,data.type);
521                        }
522                     return neCtx;
523 schuur      1.1     }
524                  
525 konrad.r    1.20    static CMPIStatus mbAttachThread(const CMPIBroker* mb, const CMPIContext* eCtx) {
526 schuur      1.11       DDD(cout<<"--- mbAttachThread()"<<endl);
527                        ((CMPI_Context*)eCtx)->thr=new CMPI_ThreadContext(mb,eCtx);
528                        CMReturn(CMPI_RC_OK);
529 schuur      1.1     }
530                  
531 konrad.r    1.20    static CMPIStatus mbDetachThread(const CMPIBroker* mb, const CMPIContext* eCtx) {
532 schuur      1.11       DDD(cout<<"--- mbDetachThread()"<<endl);
533                        mb=CM_BROKER;
534                        delete ((CMPI_Context*)eCtx)->thr;
535                        CMReturn(CMPI_RC_OK);
536                     }
537 schuur      1.1  
538 konrad.r    1.20    static CMPIStatus mbDeliverIndication(const CMPIBroker* eMb, const CMPIContext* ctx,
539                                 const char *ns, const CMPIInstance* ind) {
540 schuur      1.11       DDD(cout<<"--- mbDeliverIndication()"<<endl);
541                        eMb=CM_BROKER;
542                        CMPI_Broker *mb=(CMPI_Broker*)eMb;
543                        CMPIProviderManager::indProvRecord *prec;
544                        OperationContext* context=CM_Context(ctx);
545                  
546                        if (CMPIProviderManager::provTab.lookup(mb->name,prec)) {
547                           if (prec->enabled) {
548                              try {
549                                 context->get(SubscriptionInstanceNamesContainer::NAME);
550                              }
551 konrad.r    1.21             catch (const Exception &) {
552 schuur      1.11                Array<CIMObjectPath> subscriptionInstanceNames;
553                                 context->insert(SubscriptionInstanceNamesContainer(subscriptionInstanceNames));
554                              }
555                              CIMIndication cimIndication(*CM_Instance(ind));
556                              AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
557                              try {
558                                 prec->handler->deliver(
559                                    *context,
560                     //               OperationContext(*CM_Context(ctx)),
561                                    cimIndication);
562                              CMReturn(CMPI_RC_OK);
563                        }
564 konrad.r    1.20             catch (const CIMException &e) {
565 schuur      1.11                DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
566                                 CMReturn((CMPIrc)e.getCode());
567                              }
568 schuur      1.7           }
569                        }
570 schuur      1.11       CMReturn(CMPI_RC_ERR_FAILED);
571 schuur      1.1     }
572 schuur      1.11 
573                  }
574 schuur      1.1  
575                  static CMPIBrokerFT broker_FT={
576                       0, // brokerClassification;
577                       CMPICurrentVersion,
578                       "Pegasus",
579                       mbPrepareAttachThread,
580                       mbAttachThread,
581                       mbDetachThread,
582                       mbDeliverIndication,
583                       mbEnumInstanceNames,
584                       mbGetInstance,
585                       mbCreateInstance,
586 konrad.r    1.20      mbModifyInstance,
587 schuur      1.1       mbDeleteInstance,
588                       mbExecQuery,
589                       mbEnumInstances,
590                       mbAssociators,
591                       mbAssociatorNames,
592                       mbReferences,
593                       mbReferenceNames,
594                       mbInvokeMethod,
595                       mbSetProperty,
596                       mbGetProperty,
597                  };
598                  
599                  CMPIBrokerFT *CMPI_Broker_Ftab=& broker_FT;
600                  
601                  PEGASUS_NAMESPACE_END
602                  
603                  

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2