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

  1 karl  1.12 //%2005////////////////////////////////////////////////////////////////////////
  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 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.17.2.1 //
 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                      // Modified By:
 33                      //
 34                      //%/////////////////////////////////////////////////////////////////////////////
 35                      
 36 r.kieninger 1.17.2.1 #include "CMPI_Version.h"
 37 schuur      1.2      
 38 schuur      1.1      #include "CMPI_ContextArgs.h"
 39                      #include "CMPI_Ftabs.h"
 40                      #include "CMPI_Value.h"
 41                      #include "CMPI_String.h"
 42                      
 43 schuur      1.6      #include <string.h>
 44                      
 45 schuur      1.1      PEGASUS_USING_STD;
 46                      PEGASUS_NAMESPACE_BEGIN
 47                      
 48                      // CMPIArgs section
 49                      
 50 schuur      1.10     extern "C" {
 51                      
 52                         static CMPIStatus argsRelease(CMPIArgs* eArg) {
 53                            Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
 54                            if (arg) {
 55                               delete arg;
 56                               (reinterpret_cast<CMPI_Object*>(eArg))->unlinkAndDelete();
 57                            }
 58                            CMReturn(CMPI_RC_OK);
 59 schuur      1.8         }
 60 schuur      1.1      
 61 schuur      1.10        static CMPIStatus argsReleaseNop(CMPIArgs* eArg) {
 62                            CMReturn(CMPI_RC_OK);
 63                         }
 64 schuur      1.1      
 65 konrad.r    1.13        static CMPIArgs* argsClone(const CMPIArgs* eArg, CMPIStatus* rc) {
 66 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
 67                            Array<CIMParamValue>* cArg=new Array<CIMParamValue>();
 68                            for (long i=0,s=arg->size(); i<s; i++) {
 69                               const CIMParamValue &v=(*arg)[i];
 70                               cArg->append(v.clone());
 71                            }
 72                            CMPI_Object* obj=new CMPI_Object(cArg);
 73                            obj->unlink();
 74                            CMPIArgs* neArg=(CMPIArgs*)obj;
 75                            if (rc) CMSetStatus(rc,CMPI_RC_OK);
 76                            return neArg;
 77                         }
 78 schuur      1.1      
 79 schuur      1.10        static long locateArg(const Array<CIMParamValue> &a, const CIMName &eName) {
 80                            for (long i=0,s=a.size(); i<s; i++) {
 81                               const String &n=a[i].getParameterName();
 82                               if (String::equalNoCase(n,eName.getString())) return i;
 83                            }
 84                            return -1;
 85 schuur      1.1         }
 86                      
 87 konrad.r    1.16        static CMPIStatus argsAddArg(const CMPIArgs* eArg, const char *name, const CMPIValue* data,  CMPIType type) {
 88 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
 89                            CMPIrc rc;
 90                            CIMValue v=value2CIMValue(data,type,&rc);
 91                            CIMName sName(name);
 92                      
 93                            long i=locateArg(*arg,sName);
 94                            if (i>=0) arg->remove(i);
 95 schuur      1.1      
 96 schuur      1.10           arg->append(CIMParamValue(sName.getString(),v));
 97                            CMReturn(CMPI_RC_OK);
 98                         }
 99 schuur      1.1      
100 r.kieninger 1.17.2.1    static CMPIData argsGetArgAt(const CMPIArgs* eArg, CMPICount pos,
101 konrad.r    1.13     				CMPIString** name,
102                      				CMPIStatus* rc) {
103                      
104 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
105                            CMPIData data={0,CMPI_nullValue | CMPI_notFound,{0}};
106                      
107                            if (pos>arg->size()) {
108                               if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_FOUND);
109                               return data;
110                            }
111 schuur      1.1      
112 schuur      1.10           CIMValue v=(*arg)[pos].getValue();
113                            CIMType pType=v.getType();
114                            CMPIType t=type2CMPIType(pType,v.isArray());
115                      
116                            value2CMPIData(v,t,&data);
117                      
118                            if (name) {
119                               String n=(*arg)[pos].getParameterName();
120                               *name=(CMPIString*)string2CMPIString(n);
121                            }
122 schuur      1.1      
123 schuur      1.10           if (rc) CMSetStatus(rc,CMPI_RC_OK);
124 schuur      1.1            return data;
125                         }
126                      
127 konrad.r    1.13        static CMPIData argsGetArg(const CMPIArgs* eArg, const char *name, CMPIStatus* rc) {
128 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
129 r.kieninger 1.17.2.1       CIMName eName(name,CIMName::UNCHECKED);
130 schuur      1.1      
131 schuur      1.10           long i=locateArg(*arg,eName);
132                            if (i>=0) return argsGetArgAt(eArg,i,NULL,rc);
133 schuur      1.1      
134 schuur      1.10           CMPIData data={0,CMPI_nullValue | CMPI_notFound,{0}};
135                            if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_FOUND);
136                            return data;
137 schuur      1.1         }
138                      
139 konrad.r    1.13        static CMPICount argsGetArgCount(const CMPIArgs* eArg, CMPIStatus* rc) {
140 schuur      1.10           Array<CIMParamValue>* arg=(Array<CIMParamValue>*)eArg->hdl;
141                            if (rc) CMSetStatus(rc,CMPI_RC_OK);
142                            return arg->size();
143                         }
144 schuur      1.1      
145                      }
146                      
147                      static CMPIArgsFT args_FT={
148                           CMPICurrentVersion,
149                           argsRelease,
150                           argsClone,
151                           argsAddArg,
152                           argsGetArg,
153                           argsGetArgAt,
154                           argsGetArgCount,
155                      };
156                      
157                      CMPIArgsFT *CMPI_Args_Ftab=&args_FT;
158                      
159                      static CMPIArgsFT argsOnStack_FT={
160                           CMPICurrentVersion,
161                           argsReleaseNop,
162                           argsClone,
163                           argsAddArg,
164                           argsGetArg,
165 schuur      1.1           argsGetArgAt,
166                           argsGetArgCount,
167                      };
168                      
169                      CMPIArgsFT *CMPI_ArgsOnStack_Ftab=&argsOnStack_FT;
170                      
171                      
172                      
173                      // CMPIContext Session
174                      
175 schuur      1.10     extern "C" {
176                      
177 schuur      1.1      static CMPIStatus contextReleaseNop(CMPIContext* eCtx) {
178                         CMReturn(CMPI_RC_OK);
179                      }
180                      
181 konrad.r    1.13        static CMPIData contextGetEntry(const CMPIContext* eCtx, const char *name, CMPIStatus* rc) {
182 schuur      1.10           return argsGetArg((CMPIArgs*)eCtx,name,rc);
183                         }
184 schuur      1.1      
185 konrad.r    1.13        CMPIData contextGetEntryAt(const CMPIContext* eCtx, CMPICount pos,
186 schuur      1.10                    CMPIString** name, CMPIStatus* rc) {
187                            return argsGetArgAt((CMPIArgs*)eCtx,pos,name,rc);
188                         }
189                      
190 konrad.r    1.13        static CMPICount contextGetEntryCount(const CMPIContext* eCtx, CMPIStatus* rc) {
191 schuur      1.10           return argsGetArgCount((CMPIArgs*)eCtx,rc);
192                         }
193                      
194 konrad.r    1.13        static CMPIStatus contextAddEntry(const CMPIContext* eCtx, const char *name,
195 konrad.r    1.16                    const CMPIValue* data,  CMPIType type) {
196 schuur      1.10           if (strcmp(name,SnmpTrapOidContainer::NAME.getCString())==0) {
197                               OperationContext *ctx=((CMPI_Context*)eCtx)->ctx;
198                               if (type==CMPI_chars) {
199                                  ctx->insert(SnmpTrapOidContainer((char*)data));
200                                  CMReturn(CMPI_RC_OK);
201                               }
202                               else if (type==CMPI_string) {
203                                  ctx->insert(SnmpTrapOidContainer((char*)data->string->hdl));
204                                  CMReturn(CMPI_RC_OK);
205                               }
206 schuur      1.4            }
207 schuur      1.10           return argsAddArg((CMPIArgs*)eCtx,name,data,type);
208 schuur      1.4         }
209 schuur      1.10     
210 schuur      1.1      }
211                      
212                      static CMPIContextFT context_FT={
213                           CMPICurrentVersion,
214                           contextReleaseNop,
215                           NULL,
216                           contextGetEntry,
217                           contextGetEntryAt,
218                           contextGetEntryCount,
219                           contextAddEntry,
220                      };
221                      
222                      CMPIContextFT *CMPI_Context_Ftab=&context_FT;
223                      
224                      static CMPIContextFT contextOnStack_FT={
225                           CMPICurrentVersion,
226                           contextReleaseNop,
227                           NULL,
228                           contextGetEntry,
229                           contextGetEntryAt,
230                           contextGetEntryCount,
231 schuur      1.1           contextAddEntry,
232                      };
233                      
234                      CMPIContextFT *CMPI_ContextOnStack_Ftab=&contextOnStack_FT;
235                      
236                      
237                      CMPI_Context::CMPI_Context(const OperationContext& ct) {
238                            ctx=(OperationContext*)&ct;
239                            thr=NULL;
240                            hdl=(void*)new Array<CIMParamValue>();
241                            ft=CMPI_Context_Ftab;
242                         }
243 konrad.r    1.17     CMPI_Context::~CMPI_Context() {
244                            delete (Array<CIMParamValue>*)hdl;
245                            delete ctx;
246                      }
247 schuur      1.1      CMPI_ContextOnStack::CMPI_ContextOnStack(const OperationContext& ct) {
248                            ctx=(OperationContext*)&ct;
249                            hdl=(void*)new Array<CIMParamValue>();
250                            ft=CMPI_ContextOnStack_Ftab;
251                         }
252                      
253                      CMPI_ContextOnStack::~CMPI_ContextOnStack() {
254                            delete (Array<CIMParamValue>*)hdl;
255                         }
256                      
257                      CMPI_ArgsOnStack::CMPI_ArgsOnStack(const Array<CIMParamValue>& args) {
258                            hdl=(void*)&args;
259                            ft=CMPI_ArgsOnStack_Ftab;
260                         }
261                      
262                      PEGASUS_NAMESPACE_END
263                      
264                      
265                      
266                      
267                      
268 schuur      1.1      
269                      

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2