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

  1 a.dunfey 1.18.2.1 //%2006////////////////////////////////////////////////////////////////////////
  2 schuur   1.1      //
  3 karl     1.11     // 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.11     // 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.12     // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10                   // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11 a.dunfey 1.18.2.1 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 12                   // EMC Corporation; Symantec Corporation; The Open Group.
 13 schuur   1.1      //
 14                   // Permission is hereby granted, free of charge, to any person obtaining a copy
 15                   // of this software and associated documentation files (the "Software"), to
 16                   // deal in the Software without restriction, including without limitation the
 17                   // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 18                   // sell copies of the Software, and to permit persons to whom the Software is
 19                   // furnished to do so, subject to the following conditions:
 20 karl     1.11     // 
 21 schuur   1.1      // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 22                   // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 23                   // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 24                   // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 25                   // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 26                   // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 27                   // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 28                   // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 29                   //
 30                   //==============================================================================
 31                   //
 32                   // Author:      Adrian Schuur, schuur@de.ibm.com
 33                   //
 34                   // Modified By:
 35                   //
 36                   //%/////////////////////////////////////////////////////////////////////////////
 37                   
 38 r.kieninger 1.18     #include <Pegasus/Common/CIMNameUnchecked.h>
 39 schuur      1.5      #include "CMPI_Version.h"
 40 schuur      1.2      
 41 schuur      1.1      #include "CMPI_ContextArgs.h"
 42                      #include "CMPI_Ftabs.h"
 43                      #include "CMPI_Value.h"
 44                      #include "CMPI_String.h"
 45                      
 46 schuur      1.6      #include <string.h>
 47                      
 48 schuur      1.1      PEGASUS_USING_STD;
 49                      PEGASUS_NAMESPACE_BEGIN
 50                      
 51                      // CMPIArgs section
 52                      
 53 schuur      1.10     extern "C" {
 54                      
 55                         static CMPIStatus argsRelease(CMPIArgs* eArg) {
 56                            Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
 57                            if (arg) {
 58                               delete arg;
 59                               (reinterpret_cast<CMPI_Object*>(eArg))->unlinkAndDelete();
 60                            }
 61                            CMReturn(CMPI_RC_OK);
 62 schuur      1.8         }
 63 schuur      1.1      
 64 schuur      1.10        static CMPIStatus argsReleaseNop(CMPIArgs* eArg) {
 65                            CMReturn(CMPI_RC_OK);
 66                         }
 67 schuur      1.1      
 68 konrad.r    1.13        static CMPIArgs* argsClone(const CMPIArgs* eArg, CMPIStatus* rc) {
 69 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
 70                            Array<CIMParamValue>* cArg=new Array<CIMParamValue>();
 71                            for (long i=0,s=arg->size(); i<s; i++) {
 72                               const CIMParamValue &v=(*arg)[i];
 73                               cArg->append(v.clone());
 74                            }
 75                            CMPI_Object* obj=new CMPI_Object(cArg);
 76                            obj->unlink();
 77                            CMPIArgs* neArg=(CMPIArgs*)obj;
 78                            if (rc) CMSetStatus(rc,CMPI_RC_OK);
 79                            return neArg;
 80                         }
 81 schuur      1.1      
 82 schuur      1.10        static long locateArg(const Array<CIMParamValue> &a, const CIMName &eName) {
 83                            for (long i=0,s=a.size(); i<s; i++) {
 84                               const String &n=a[i].getParameterName();
 85                               if (String::equalNoCase(n,eName.getString())) return i;
 86                            }
 87                            return -1;
 88 schuur      1.1         }
 89                      
 90 konrad.r    1.16        static CMPIStatus argsAddArg(const CMPIArgs* eArg, const char *name, const CMPIValue* data,  CMPIType type) {
 91 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
 92                            CMPIrc rc;
 93                            CIMValue v=value2CIMValue(data,type,&rc);
 94                            CIMName sName(name);
 95                      
 96                            long i=locateArg(*arg,sName);
 97                            if (i>=0) arg->remove(i);
 98 schuur      1.1      
 99 schuur      1.10           arg->append(CIMParamValue(sName.getString(),v));
100                            CMReturn(CMPI_RC_OK);
101                         }
102 schuur      1.1      
103 konrad.r    1.13        static CMPIData argsGetArgAt(const CMPIArgs* eArg, CMPICount pos, 
104                      				CMPIString** name,
105                      				CMPIStatus* rc) {
106                      
107 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
108                            CMPIData data={0,CMPI_nullValue | CMPI_notFound,{0}};
109                      
110                            if (pos>arg->size()) {
111                               if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_FOUND);
112                               return data;
113                            }
114 schuur      1.1      
115 schuur      1.10           CIMValue v=(*arg)[pos].getValue();
116                            CIMType pType=v.getType();
117                            CMPIType t=type2CMPIType(pType,v.isArray());
118                      
119                            value2CMPIData(v,t,&data);
120                      
121                            if (name) {
122                               String n=(*arg)[pos].getParameterName();
123                               *name=(CMPIString*)string2CMPIString(n);
124                            }
125 schuur      1.1      
126 schuur      1.10           if (rc) CMSetStatus(rc,CMPI_RC_OK);
127 schuur      1.1            return data;
128                         }
129                      
130 konrad.r    1.13        static CMPIData argsGetArg(const CMPIArgs* eArg, const char *name, CMPIStatus* rc) {
131 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
132 r.kieninger 1.18           CIMNameUnchecked eName(name);
133 schuur      1.1      
134 schuur      1.10           long i=locateArg(*arg,eName);
135                            if (i>=0) return argsGetArgAt(eArg,i,NULL,rc);
136 schuur      1.1      
137 schuur      1.10           CMPIData data={0,CMPI_nullValue | CMPI_notFound,{0}};
138                            if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_FOUND);
139                            return data;
140 schuur      1.1         }
141                      
142 konrad.r    1.13        static CMPICount argsGetArgCount(const CMPIArgs* eArg, CMPIStatus* rc) {
143 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
144                            if (rc) CMSetStatus(rc,CMPI_RC_OK);
145                            return arg->size();
146                         }
147 schuur      1.1      
148                      }
149                      
150                      static CMPIArgsFT args_FT={
151                           CMPICurrentVersion,
152                           argsRelease,
153                           argsClone,
154                           argsAddArg,
155                           argsGetArg,
156                           argsGetArgAt,
157                           argsGetArgCount,
158                      };
159                      
160                      CMPIArgsFT *CMPI_Args_Ftab=&args_FT;
161                      
162                      static CMPIArgsFT argsOnStack_FT={
163                           CMPICurrentVersion,
164                           argsReleaseNop,
165                           argsClone,
166                           argsAddArg,
167                           argsGetArg,
168 schuur      1.1           argsGetArgAt,
169                           argsGetArgCount,
170                      };
171                      
172                      CMPIArgsFT *CMPI_ArgsOnStack_Ftab=&argsOnStack_FT;
173                      
174                      
175                      
176                      // CMPIContext Session
177                      
178 schuur      1.10     extern "C" {
179                      
180 schuur      1.1      static CMPIStatus contextReleaseNop(CMPIContext* eCtx) {
181                         CMReturn(CMPI_RC_OK);
182                      }
183                      
184 konrad.r    1.13        static CMPIData contextGetEntry(const CMPIContext* eCtx, const char *name, CMPIStatus* rc) {
185 schuur      1.10           return argsGetArg((CMPIArgs*)eCtx,name,rc);
186                         }
187 schuur      1.1      
188 konrad.r    1.13        CMPIData contextGetEntryAt(const CMPIContext* eCtx, CMPICount pos,
189 schuur      1.10                    CMPIString** name, CMPIStatus* rc) {
190                            return argsGetArgAt((CMPIArgs*)eCtx,pos,name,rc);
191                         }
192                      
193 konrad.r    1.13        static CMPICount contextGetEntryCount(const CMPIContext* eCtx, CMPIStatus* rc) {
194 schuur      1.10           return argsGetArgCount((CMPIArgs*)eCtx,rc);
195                         }
196                      
197 konrad.r    1.13        static CMPIStatus contextAddEntry(const CMPIContext* eCtx, const char *name,
198 konrad.r    1.16                    const CMPIValue* data,  CMPIType type) {
199 schuur      1.10           if (strcmp(name,SnmpTrapOidContainer::NAME.getCString())==0) {
200                               OperationContext *ctx=((CMPI_Context*)eCtx)->ctx;
201                               if (type==CMPI_chars) {
202                                  ctx->insert(SnmpTrapOidContainer((char*)data));
203                                  CMReturn(CMPI_RC_OK);
204                               }
205                               else if (type==CMPI_string) {
206                                  ctx->insert(SnmpTrapOidContainer((char*)data->string->hdl));
207                                  CMReturn(CMPI_RC_OK);
208                               }
209 schuur      1.4            }
210 schuur      1.10           return argsAddArg((CMPIArgs*)eCtx,name,data,type);
211 schuur      1.4         }
212 schuur      1.10     
213 schuur      1.1      }
214                      
215                      static CMPIContextFT context_FT={
216                           CMPICurrentVersion,
217                           contextReleaseNop,
218                           NULL,
219                           contextGetEntry,
220                           contextGetEntryAt,
221                           contextGetEntryCount,
222                           contextAddEntry,
223                      };
224                      
225                      CMPIContextFT *CMPI_Context_Ftab=&context_FT;
226                      
227                      static CMPIContextFT contextOnStack_FT={
228                           CMPICurrentVersion,
229                           contextReleaseNop,
230                           NULL,
231                           contextGetEntry,
232                           contextGetEntryAt,
233                           contextGetEntryCount,
234 schuur      1.1           contextAddEntry,
235                      };
236                      
237                      CMPIContextFT *CMPI_ContextOnStack_Ftab=&contextOnStack_FT;
238                      
239                      
240                      CMPI_Context::CMPI_Context(const OperationContext& ct) {
241                            ctx=(OperationContext*)&ct;
242                            thr=NULL;
243                            hdl=(void*)new Array<CIMParamValue>();
244                            ft=CMPI_Context_Ftab;
245                         }
246 konrad.r    1.17     CMPI_Context::~CMPI_Context() {
247                            delete (Array<CIMParamValue>*)hdl;
248                            delete ctx;
249                      }
250 schuur      1.1      CMPI_ContextOnStack::CMPI_ContextOnStack(const OperationContext& ct) {
251                            ctx=(OperationContext*)&ct;
252                            hdl=(void*)new Array<CIMParamValue>();
253                            ft=CMPI_ContextOnStack_Ftab;
254                         }
255                      
256                      CMPI_ContextOnStack::~CMPI_ContextOnStack() {
257                            delete (Array<CIMParamValue>*)hdl;
258                         }
259                      
260                      CMPI_ArgsOnStack::CMPI_ArgsOnStack(const Array<CIMParamValue>& args) {
261                            hdl=(void*)&args;
262                            ft=CMPI_ArgsOnStack_Ftab;
263                         }
264                      
265                      PEGASUS_NAMESPACE_END
266                      
267                      
268                      
269                      
270                      
271 schuur      1.1      
272                      

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2