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
|