(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 schuur      1.11 static CIMPropertyList getList(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                  CIMClass* mbGetClass(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                     catch (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 schuur      1.11    static CMPIInstance* mbGetInstance(CMPIBroker *mb, CMPIContext *ctx,
107                                    CMPIObjectPath *cop, char **properties, CMPIStatus *rc) {
108                        DDD(cout<<"--- mbGetInstance()"<<endl);
109                        mb=CM_BROKER;
110                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
111                        CIMPropertyList props=getList(properties);
112                        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.16 	     ci.setPath(qop);
127 schuur      1.11          if (rc) CMSetStatus(rc,CMPI_RC_OK);
128                           return (CMPIInstance*)new CMPI_Object(new CIMInstance(ci));
129                        }
130                        catch (CIMException &e) {
131                           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                     static CMPIObjectPath* mbCreateInstance(CMPIBroker *mb, CMPIContext *ctx,
141                                    CMPIObjectPath *cop, CMPIInstance *ci, CMPIStatus *rc) {
142                        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                        catch (CIMException &e) {
155                           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 schuur      1.11       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 schuur      1.11    static CMPIStatus mbSetInstance(CMPIBroker *mb, CMPIContext *ctx,
165                           CMPIObjectPath *cop, CMPIInstance *ci, char ** properties) {
166                        DDD(cout<<"--- mbSetInstance()"<<endl);
167                        mb=CM_BROKER;
168                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
169                        CIMPropertyList props=getList(properties);
170                  
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                        catch (CIMException &e) {
184                           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 schuur      1.11    static CMPIStatus mbDeleteInstance (CMPIBroker *mb, CMPIContext *ctx,
192                                    CMPIObjectPath *cop) {
193                        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                        catch (CIMException &e) {
208                           DDD(cout<<"### exception: mbDeleteInstance - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
209                           CMReturnWithString((CMPIrc)e.getCode(),
210                              (CMPIString*)string2CMPIString(e.getMessage()));
211                        }
212 schuur      1.11       CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-3");
213 schuur      1.1     }
214                  
215 schuur      1.11    static CMPIEnumeration* mbExecQuery(CMPIBroker *mb, CMPIContext *ctx,
216                                    CMPIObjectPath *cop, const char *query, const char *lang, CMPIStatus *rc) {
217                        DDD(cout<<"--- mbExecQuery()"<<endl);
218                        mb=CM_BROKER;
219                  
220                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
221                        try {
222                           Array<CIMObject> const &en=CM_CIMOM(mb)->execQuery(
223                                       OperationContext(*CM_Context(ctx)),
224                           CM_ObjectPath(cop)->getNameSpace(),
225                           String(query),
226                           String(lang));
227                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
228                           return new CMPI_ObjEnumeration(new Array<CIMObject>(en));
229                        }
230                        catch (CIMException &e) {
231                           DDD(cout<<"### exception: mbExecQuery - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
232                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
233                              (CMPIString*)string2CMPIString(e.getMessage()));
234                        }
235                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERR_FAILED,"Internal error - CMPIBoker.cpp-4");
236 schuur      1.11       return NULL;
237 schuur      1.1     }
238                  
239 schuur      1.11    static CMPIEnumeration* mbEnumInstances(CMPIBroker *mb, CMPIContext *ctx,
240                                    CMPIObjectPath *cop, char **properties, CMPIStatus *rc) {
241                        DDD(cout<<"--- mbEnumInstances()"<<endl);
242                        mb=CM_BROKER;
243                  
244                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
245                        CIMPropertyList props=getList(properties);
246                  
247                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
248                        try {
249                           Array<CIMInstance> const &en=CM_CIMOM(mb)->enumerateInstances(
250                                       OperationContext(*CM_Context(ctx)),
251                           CM_ObjectPath(cop)->getNameSpace(),
252                           CM_ObjectPath(cop)->getClassName(),
253                           CM_DeepInheritance(flgs),
254                           CM_LocalOnly(flgs),
255                           CM_IncludeQualifiers(flgs),
256                           CM_ClassOrigin(flgs),
257                           props);
258                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
259                           return new CMPI_InstEnumeration(new Array<CIMInstance>(en));
260 schuur      1.11       }
261                        catch (CIMException &e) {
262                           DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
263                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
264                              (CMPIString*)string2CMPIString(e.getMessage()));
265                           return NULL;
266                        }
267                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-5");
268                        return NULL;
269 schuur      1.1     }
270                  
271 schuur      1.11    static CMPIEnumeration* mbEnumInstanceNames(CMPIBroker *mb, CMPIContext *ctx,
272                                    CMPIObjectPath *cop, CMPIStatus *rc) {
273                        DDD(cout<<"--- mbEnumInstanceNames()"<<endl);
274                        mb=CM_BROKER;
275                  
276                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
277                     try {
278                           Array<CIMObjectPath> const &en=CM_CIMOM(mb)->enumerateInstanceNames(
279                                       OperationContext(*CM_Context(ctx)),
280                           CM_ObjectPath(cop)->getNameSpace(),
281                           CM_ObjectPath(cop)->getClassName());
282                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
283                           return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
284                        }
285                        catch (CIMException &e) {
286                           DDD(cout<<"### exception: mbEnumInstances - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
287                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
288                              (CMPIString*)string2CMPIString(e.getMessage()));
289                        }
290                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-6");
291 schuur      1.9        return NULL;
292 schuur      1.1     }
293                  
294 schuur      1.11    static CMPIEnumeration* mbAssociators(CMPIBroker *mb, CMPIContext *ctx,
295                                    CMPIObjectPath *cop, const char *assocClass, const char *resultClass,
296                                    const char *role, const char *resultRole, char **properties, CMPIStatus *rc) {
297                        DDD(cout<<"--- mbAssociators()"<<endl);
298                        mb=CM_BROKER;
299                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
300                        CIMPropertyList props=getList(properties);
301                        CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
302                                          CM_ObjectPath(cop)->getClassName(),
303                              CM_ObjectPath(cop)->getKeyBindings());
304                  
305                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
306                        try {
307                           Array<CIMObject> const &en=CM_CIMOM(mb)->associators(
308                                       OperationContext(*CM_Context(ctx)),
309                           CM_ObjectPath(cop)->getNameSpace(),
310 r.kieninger 1.16          qop,
311 schuur      1.11          assocClass ? CIMName(assocClass) : CIMName(),
312                           resultClass ? CIMName(resultClass) : CIMName(),
313                           role ? String(role) : String::EMPTY,
314                           resultRole ? String(resultRole) : String::EMPTY,
315                           CM_IncludeQualifiers(flgs),
316                           CM_ClassOrigin(flgs),
317                           props);
318                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
319                           return new CMPI_ObjEnumeration(new Array<CIMObject>(en));
320                        }
321                        catch (CIMException &e) {
322                           DDD(cout<<"### exception: mbAssociators - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
323                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
324                              (CMPIString*)string2CMPIString(e.getMessage()));
325                           return NULL;
326                        }
327                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-7");
328                        return NULL;
329 schuur      1.1     }
330                  
331 schuur      1.11    static CMPIEnumeration* mbAssociatorNames(CMPIBroker *mb, CMPIContext *ctx,
332                                    CMPIObjectPath *cop, const char *assocClass, const char *resultClass,
333                           const char *role, const char *resultRole, CMPIStatus *rc) {
334                        DDD(cout<<"--- mbAssociatorsNames()"<<endl);
335                        mb=CM_BROKER;
336                        CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
337                                          CM_ObjectPath(cop)->getClassName(),
338                              CM_ObjectPath(cop)->getKeyBindings());
339                  
340                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
341                        try {
342                           Array<CIMObjectPath> const &en=CM_CIMOM(mb)->associatorNames(
343                           OperationContext(*CM_Context(ctx)),
344                           CM_ObjectPath(cop)->getNameSpace(),
345 r.kieninger 1.16          qop,
346 schuur      1.11          assocClass ? CIMName(assocClass) : CIMName(),
347                           resultClass ? CIMName(resultClass) : CIMName(),
348                           role ? String(role) : String::EMPTY,
349                           resultRole ? String(resultRole) : String::EMPTY);
350                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
351                           return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
352                        }
353                        catch (CIMException &e) {
354                           DDD(cout<<"### exception: mbAssociatorsNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
355                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
356                              (CMPIString*)string2CMPIString(e.getMessage()));
357                        }
358                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-8");
359 schuur      1.9        return NULL;
360 schuur      1.1     }
361                  
362 schuur      1.11    static CMPIEnumeration* mbReferences(CMPIBroker *mb, CMPIContext *ctx,
363                                    CMPIObjectPath *cop,  const char *resultClass, const char *role ,
364                           char **properties, CMPIStatus *rc) {
365                        DDD(cout<<"--- mbReferences()"<<endl);
366                        mb=CM_BROKER;
367                        CMPIFlags flgs=ctx->ft->getEntry(ctx,CMPIInvocationFlags,NULL).value.uint32;
368                        CIMPropertyList props=getList(properties);
369                        CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
370                                          CM_ObjectPath(cop)->getClassName(),
371                              CM_ObjectPath(cop)->getKeyBindings());
372                  
373                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
374                        try {
375                           Array<CIMObject> const &en=CM_CIMOM(mb)->references(
376                           OperationContext(*CM_Context(ctx)),
377                           CM_ObjectPath(cop)->getNameSpace(),
378                           qop,
379                           resultClass ? CIMName(resultClass) : CIMName(),
380                           role ? String(role) : String::EMPTY,
381                           CM_IncludeQualifiers(flgs),
382                           CM_ClassOrigin(flgs),
383 schuur      1.11          props);
384                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
385                           return new CMPI_ObjEnumeration(new Array<CIMObject>(en));
386                        }
387                        catch (CIMException &e) {
388                           DDD(cout<<"### exception: mbReferences - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
389                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
390                              (CMPIString*)string2CMPIString(e.getMessage()));
391                           return NULL;
392                        }
393                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-10");
394                        return NULL;
395 schuur      1.1     }
396                  
397 schuur      1.11    static CMPIEnumeration* mbReferenceNames(CMPIBroker *mb, CMPIContext *ctx,
398                                    CMPIObjectPath *cop, const char *resultClass, const char *role,
399                                    CMPIStatus *rc) {
400                        DDD(cout<<"--- mbReferencesNames()"<<endl);
401                        mb=CM_BROKER;
402                        CIMObjectPath qop(String::EMPTY,CIMNamespaceName(),
403                                          CM_ObjectPath(cop)->getClassName(),
404                              CM_ObjectPath(cop)->getKeyBindings());
405                  
406                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
407                        try {
408                           Array<CIMObjectPath> const &en=CM_CIMOM(mb)->referenceNames(
409                           OperationContext(*CM_Context(ctx)),
410                           CM_ObjectPath(cop)->getNameSpace(),
411 r.kieninger 1.16          qop,
412 schuur      1.11          resultClass ? CIMName(resultClass) : CIMName(),
413                           role ? String(role) : String::EMPTY);
414                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
415                           return new CMPI_OpEnumeration(new Array<CIMObjectPath>(en));
416                        }
417                        catch (CIMException &e) {
418                           DDD(cout<<"### exception: mbReferencesNames - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
419                           if (rc) CMSetStatusWithString(rc,(CMPIrc)e.getCode(),
420                              (CMPIString*)string2CMPIString(e.getMessage()));
421                        }
422                        if (rc) CMSetStatusWithChars(mb,rc,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-11");
423 schuur      1.9        return NULL;
424 schuur      1.1     }
425                  
426 schuur      1.11    static CMPIData mbInvokeMethod(CMPIBroker *mb, CMPIContext *ctx,
427                                    CMPIObjectPath *cop, const char *method, CMPIArgs *in, CMPIArgs *out,
428                           CMPIStatus *rc) {
429 konrad.r    1.13       CMPIData data={0,CMPI_nullValue,{0}};
430 schuur      1.11       mb=CM_BROKER;
431                        if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_SUPPORTED);
432                        return data;
433 schuur      1.1     }
434                  
435 schuur      1.11    static CMPIStatus mbSetProperty(CMPIBroker *mb, CMPIContext *ctx,
436                                    CMPIObjectPath *cop, const char *name, CMPIValue *val,
437                                    CMPIType type) {
438                        DDD(cout<<"--- mbSetProperty()"<<endl);
439                        mb=CM_BROKER;
440                        CMPIrc rc;
441                        CIMValue v=value2CIMValue(val,type,&rc);
442                  
443                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
444                        try {
445                           CM_CIMOM(mb)->setProperty(
446                           OperationContext(*CM_Context(ctx)),
447                           CM_ObjectPath(cop)->getNameSpace(),
448                           *CM_ObjectPath(cop),
449                           String(name),
450                           v);
451                           CMReturn(CMPI_RC_OK);
452                        }
453                        catch (CIMException &e) {
454                           DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
455                           CMReturnWithString((CMPIrc)e.getCode(),
456 schuur      1.11             (CMPIString*)string2CMPIString(e.getMessage()));
457                        }
458                        CMReturnWithChars(mb,CMPI_RC_ERROR,"Internal error - CMPIBoker.cpp-12");
459 schuur      1.1     }
460                  
461 schuur      1.11    static CMPIData mbGetProperty(CMPIBroker *mb, CMPIContext *ctx,
462                                    CMPIObjectPath *cop, const char *name, CMPIStatus *rc) {
463                        DDD(cout<<"--- mbGetProperty()"<<endl);
464                        mb=CM_BROKER;
465 konrad.r    1.13       CMPIData data={0,CMPI_nullValue,{0}};
466 schuur      1.11 
467                        AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
468                        try {
469                           CIMValue v=CM_CIMOM(mb)->getProperty(
470                           OperationContext(*CM_Context(ctx)),
471                           CM_ObjectPath(cop)->getNameSpace(),
472                           *CM_ObjectPath(cop),
473                           String(name));
474                           CIMType vType=v.getType();
475                           CMPIType t=type2CMPIType(vType,v.isArray());
476                           value2CMPIData(v,t,&data);
477                           if (rc) CMSetStatus(rc,CMPI_RC_OK);
478                           return data;
479                        }
480                        catch (CIMException &e) {
481                           DDD(cout<<"### exception: mbGetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
482                           if (rc) CMSetStatus(rc,(CMPIrc)e.getCode());
483                        }
484                        if (rc) CMSetStatus(rc,CMPI_RC_ERR_FAILED);
485 schuur      1.1        return data;
486                     }
487 schuur      1.11 
488                     static CMPIContext* mbPrepareAttachThread(CMPIBroker* mb, CMPIContext* eCtx) {
489                        DDD(cout<<"--- mbPrepareAttachThread()"<<endl);
490                        mb=CM_BROKER;
491                        OperationContext *ctx=(OperationContext*)((CMPI_Context*)eCtx)->ctx;
492                        OperationContext nctx=*ctx;
493                        CMPIContext* neCtx=new CMPI_Context(*(new OperationContext(nctx)));
494                        CMPIString *name;
495                        for (int i=0,s=CMPI_Args_Ftab->getArgCount((CMPIArgs*)eCtx,NULL); i<s; i++) {
496                           CMPIData data=CMPI_Args_Ftab->getArgAt((CMPIArgs*)eCtx,i,&name,NULL);
497                           CMPI_Args_Ftab->addArg((CMPIArgs*)neCtx,CMGetCharPtr(name),&data.value,data.type);
498                        }
499                     return neCtx;
500 schuur      1.1     }
501                  
502 schuur      1.11    static CMPIStatus mbAttachThread(CMPIBroker* mb, CMPIContext* eCtx) {
503                        DDD(cout<<"--- mbAttachThread()"<<endl);
504                        ((CMPI_Context*)eCtx)->thr=new CMPI_ThreadContext(mb,eCtx);
505                        CMReturn(CMPI_RC_OK);
506 schuur      1.1     }
507                  
508 schuur      1.11    static CMPIStatus mbDetachThread(CMPIBroker* mb, CMPIContext* eCtx) {
509                        DDD(cout<<"--- mbDetachThread()"<<endl);
510                        mb=CM_BROKER;
511                        delete ((CMPI_Context*)eCtx)->thr;
512                        CMReturn(CMPI_RC_OK);
513                     }
514 schuur      1.1  
515 schuur      1.11    static CMPIStatus mbDeliverIndication(CMPIBroker* eMb, CMPIContext* ctx,
516                                 const char *ns, CMPIInstance* ind) {
517                        DDD(cout<<"--- mbDeliverIndication()"<<endl);
518                        eMb=CM_BROKER;
519                        CMPI_Broker *mb=(CMPI_Broker*)eMb;
520                        CMPIProviderManager::indProvRecord *prec;
521                        OperationContext* context=CM_Context(ctx);
522                  
523                        if (CMPIProviderManager::provTab.lookup(mb->name,prec)) {
524                           if (prec->enabled) {
525                              try {
526                                 context->get(SubscriptionInstanceNamesContainer::NAME);
527                              }
528 konrad.r    1.17             catch (Exception&) {
529 schuur      1.11                Array<CIMObjectPath> subscriptionInstanceNames;
530                                 context->insert(SubscriptionInstanceNamesContainer(subscriptionInstanceNames));
531                              }
532                              CIMIndication cimIndication(*CM_Instance(ind));
533                              AutoMutex mtx(((CMPI_Broker*)mb)->mtx);
534                              try {
535                                 prec->handler->deliver(
536                                    *context,
537                     //               OperationContext(*CM_Context(ctx)),
538                                    cimIndication);
539                              CMReturn(CMPI_RC_OK);
540                        }
541                              catch (CIMException &e) {
542                                 DDD(cout<<"### exception: mbSetProperty - code: "<<e.getCode()<<" msg: "<<e.getMessage()<<endl);
543                                 CMReturn((CMPIrc)e.getCode());
544                              }
545 schuur      1.7           }
546                        }
547 schuur      1.11       CMReturn(CMPI_RC_ERR_FAILED);
548 schuur      1.1     }
549 schuur      1.11 
550                  }
551 schuur      1.1  
552                  static CMPIBrokerFT broker_FT={
553                       0, // brokerClassification;
554                       CMPICurrentVersion,
555                       "Pegasus",
556                       mbPrepareAttachThread,
557                       mbAttachThread,
558                       mbDetachThread,
559                       mbDeliverIndication,
560                       mbEnumInstanceNames,
561                       mbGetInstance,
562                       mbCreateInstance,
563                       mbSetInstance,
564                       mbDeleteInstance,
565                       mbExecQuery,
566                       mbEnumInstances,
567                       mbAssociators,
568                       mbAssociatorNames,
569                       mbReferences,
570                       mbReferenceNames,
571                       mbInvokeMethod,
572 schuur      1.1       mbSetProperty,
573                       mbGetProperty,
574                  };
575                  
576                  CMPIBrokerFT *CMPI_Broker_Ftab=& broker_FT;
577                  
578                  PEGASUS_NAMESPACE_END
579                  
580                  

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2