~ubuntu-branches/ubuntu/trusty/opendrim-lmp-ssh/trusty

« back to all changes in this revision

Viewing changes to OpenDRIM_SSHCapabilities/OpenDRIM_SSHCapabilitiesProvider.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Guillaume BOTTEX
  • Date: 2010-07-07 11:04:10 UTC
  • Revision ID: james.westby@ubuntu.com-20100707110410-2bojrtqjp582wiy8
Tags: upstream-1.0.0
ImportĀ upstreamĀ versionĀ 1.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*###############################################################################
 
2
# Linux Management Providers (LMP), SSH provider package
 
3
# Copyright (C) 2010 Feng Zhanlei, REDFLAG <fengzhanlei@redflag-linux.com>
 
4
 
5
# This program is being developed under the "OpenDRIM" project.
 
6
# The "OpenDRIM" project web page: http://opendrim.sourceforge.net
 
7
# The "OpenDRIM" project mailing list: opendrim@googlegroups.com
 
8
 
9
# This program is free software; you can redistribute it and/or
 
10
# modify it under the terms of the GNU General Public License
 
11
# as published by the Free Software Foundation; version 2
 
12
# of the License.
 
13
 
14
# This program is distributed in the hope that it will be useful,
 
15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
17
# GNU General Public License for more details.
 
18
 
19
# You should have received a copy of the GNU General Public License
 
20
# along with this program; if not, write to the Free Software
 
21
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
22
#################################################################################
 
23
 
 
24
#################################################################################
 
25
# To contributors, please leave your contact information in this section
 
26
# AND comment your changes in the source code.
 
27
 
28
# Modified by Guillaume BOTTEX <guillaumebottex@uxsystem.net>, UXSystem, 2010
 
29
###############################################################################*/
 
30
 
 
31
#include "cmpiOpenDRIM_SSHCapabilities.h"
 
32
#include "OpenDRIM_SSHCapabilitiesAccess.h"
 
33
 
 
34
static const CMPIBroker * _broker;
 
35
 
 
36
#ifdef CMPI_VER_100
 
37
#define SSH_OpenDRIM_SSHCapabilitiesProviderSetInstance SSH_OpenDRIM_SSHCapabilitiesProviderModifyInstance
 
38
#endif
 
39
 
 
40
int SSH_OpenDRIM_SSHCapabilities_init(const CMPIBroker* broker);
 
41
 
 
42
int SSH_OpenDRIM_SSHCapabilities_finalize();
 
43
 
 
44
/* ---------------------------------------------------------------------------*/
 
45
/*                      Instance Provider Interface                           */
 
46
/* ---------------------------------------------------------------------------*/
 
47
 
 
48
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderCleanup(CMPIInstanceMI * mi, const CMPIContext* ctx, CMPIBoolean terminate) {
 
49
        _E_;
 
50
        int errorCode = SSH_OpenDRIM_SSHCapabilities_finalize();
 
51
        CMPIStatus rc;
 
52
        CMSetStatus(&rc, (CMPIrc) errorCode);
 
53
        _L_;
 
54
        return rc;
 
55
}
 
56
 
 
57
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderEnumInstanceNames(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* ref) {
 
58
        _E_;
 
59
        CMPIStatus rc = {CMPI_RC_OK, NULL};
 
60
        vector<OpenDRIM_SSHCapabilities> instances;
 
61
        string errorMessage;
 
62
        
 
63
        int errorCode = SSH_OpenDRIM_SSHCapabilities_retrieve(_broker, ctx, instances, NULL, errorMessage, "ein");
 
64
        if (errorCode != OK) {
 
65
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
66
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
67
                return rc;
 
68
        }
 
69
        for (size_t i=0; i < instances.size(); i++) {
 
70
                CMPIObjectPath* op = SSH_OpenDRIM_SSHCapabilities_toCMPIObjectPath(_broker, instances[i]);
 
71
                CMReturnObjectPath(rslt, op);
 
72
        }
 
73
        CMReturnDone(rslt);
 
74
        _L_;
 
75
        return rc;
 
76
}
 
77
 
 
78
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderEnumInstances(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* ref, const char** properties) {
 
79
        _E_;
 
80
        CMPIStatus rc = {CMPI_RC_OK, NULL};
 
81
        vector<OpenDRIM_SSHCapabilities> instances;
 
82
        string errorMessage;
 
83
        
 
84
        int errorCode = SSH_OpenDRIM_SSHCapabilities_retrieve(_broker, ctx, instances, properties, errorMessage, "ei");
 
85
        if (errorCode != OK) {
 
86
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
87
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
88
                return rc;
 
89
        }
 
90
        for (size_t i=0; i < instances.size(); i++) {
 
91
                CMPIInstance* ci = SSH_OpenDRIM_SSHCapabilities_toCMPIInstance(_broker, instances[i]);
 
92
                CMReturnInstance(rslt, ci);
 
93
        }
 
94
        CMReturnDone(rslt);
 
95
        _L_;
 
96
        return rc;
 
97
}
 
98
 
 
99
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderGetInstance(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* cop, const char** properties) {
 
100
        _E_;
 
101
        CMPIStatus rc = {CMPI_RC_OK, NULL};
 
102
        OpenDRIM_SSHCapabilities instance;
 
103
        SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, cop, instance);
 
104
        string errorMessage;
 
105
        
 
106
        int errorCode = SSH_OpenDRIM_SSHCapabilities_getInstance(_broker, ctx, instance, properties, errorMessage);
 
107
        if (errorCode != OK) {
 
108
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
109
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
110
                return rc;
 
111
        }
 
112
        CMPIInstance* ci = SSH_OpenDRIM_SSHCapabilities_toCMPIInstance(_broker, instance);
 
113
        CMReturnInstance(rslt, ci);
 
114
        CMReturnDone(rslt);
 
115
        _L_;
 
116
        return rc;
 
117
}
 
118
 
 
119
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderSetInstance(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* cop, const CMPIInstance* ci, const char** properties) {
 
120
        _E_;
 
121
        CMPIStatus rc = {CMPI_RC_OK, NULL};
 
122
        OpenDRIM_SSHCapabilities newInstance, oldInstance;
 
123
        SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, ci, newInstance);
 
124
        SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, cop, oldInstance);
 
125
        string errorMessage;
 
126
        
 
127
        int errorCode = SSH_OpenDRIM_SSHCapabilities_getInstance(_broker, ctx, oldInstance, properties, errorMessage);
 
128
        if (errorCode != OK) {
 
129
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
130
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
131
                return rc;
 
132
        }
 
133
        errorCode = SSH_OpenDRIM_SSHCapabilities_setInstance(_broker, ctx, newInstance, oldInstance, properties, errorMessage);
 
134
        if (errorCode != OK) {
 
135
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
136
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
137
                return rc;
 
138
        }
 
139
        CMReturnDone(rslt);
 
140
        _L_;
 
141
        return rc;
 
142
}
 
143
 
 
144
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderCreateInstance(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* cop, const CMPIInstance* ci) {
 
145
        _E_;
 
146
        CMPIStatus rc = {CMPI_RC_OK, NULL};
 
147
        OpenDRIM_SSHCapabilities instance;
 
148
        SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, ci, instance);
 
149
        string errorMessage;
 
150
        
 
151
        int errorCode = SSH_OpenDRIM_SSHCapabilities_getInstance(_broker, ctx, instance, NULL, errorMessage);
 
152
        if (errorCode != NOT_FOUND) {
 
153
                if (errorCode == OK)
 
154
                        errorCode = ALREADY_EXISTS;
 
155
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
156
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
157
                return rc;
 
158
        }
 
159
        errorCode = SSH_OpenDRIM_SSHCapabilities_createInstance(_broker, ctx, instance, errorMessage);
 
160
        if (errorCode != OK) {
 
161
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
162
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
163
                return rc;
 
164
        }
 
165
        errorCode = SSH_OpenDRIM_SSHCapabilities_getInstance(_broker, ctx, instance, NULL, errorMessage);
 
166
        if (errorCode != OK) {
 
167
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
168
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
169
                return rc;
 
170
        }
 
171
        CMPIObjectPath* _cop = SSH_OpenDRIM_SSHCapabilities_toCMPIObjectPath(_broker, instance);
 
172
        CMReturnObjectPath(rslt, _cop);
 
173
        CMReturnDone(rslt);
 
174
        _L_;
 
175
        return rc;
 
176
}
 
177
 
 
178
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderDeleteInstance(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* cop) {
 
179
        _E_;
 
180
        CMPIStatus rc = {CMPI_RC_OK, NULL};
 
181
        OpenDRIM_SSHCapabilities instance;
 
182
        SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, cop, instance);
 
183
        string errorMessage;
 
184
        
 
185
        int errorCode = SSH_OpenDRIM_SSHCapabilities_getInstance(_broker, ctx, instance, NULL, errorMessage);
 
186
        if (errorCode != OK) {
 
187
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
188
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
189
                return rc;
 
190
        }
 
191
        errorCode = SSH_OpenDRIM_SSHCapabilities_deleteInstance(_broker, ctx, instance, errorMessage);
 
192
        if (errorCode != OK) {
 
193
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
194
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
195
                return rc;
 
196
        }
 
197
        CMReturnDone(rslt);
 
198
        _L_;
 
199
        return rc;
 
200
}
 
201
 
 
202
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderExecQuery(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* ref, const char* lang, const char* query) {
 
203
        _E_;
 
204
        CMReturn(CMPI_RC_ERR_NOT_SUPPORTED);
 
205
}
 
206
 
 
207
/* ---------------------------------------------------------------------------*/
 
208
/*                   End of Instance Provider Interface                       */
 
209
/* ---------------------------------------------------------------------------*/
 
210
 
 
211
/* ---------------------------------------------------------------------------*/
 
212
/*                        Method Provider Interface                           */
 
213
/* ---------------------------------------------------------------------------*/
 
214
 
 
215
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderMethodCleanup(CMPIMethodMI * mi, const CMPIContext * ctx, CMPIBoolean terminate) {
 
216
        _E_;
 
217
        int errorCode = SSH_OpenDRIM_SSHCapabilities_finalize();
 
218
        CMPIStatus rc;
 
219
        CMSetStatus(&rc, (CMPIrc) errorCode);
 
220
        _L_;
 
221
        return rc;
 
222
}
 
223
 
 
224
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderInvokeMethod(CMPIMethodMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* ref, const char* methodName, const CMPIArgs* in, CMPIArgs* out) {
 
225
        _E_;
 
226
        CMPIStatus rc = {CMPI_RC_OK, NULL};
 
227
        OpenDRIM_SSHCapabilities instance;
 
228
        SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, ref, instance);
 
229
        string errorMessage;
 
230
 
 
231
        const char* properties[] = {"InstanceID"};
 
232
        int errorCode = SSH_OpenDRIM_SSHCapabilities_getInstance(_broker, ctx, instance, properties, errorMessage);
 
233
        if (errorCode != OK) {
 
234
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
235
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
236
                return rc;
 
237
        }
 
238
 
 
239
        if ((string) methodName =="CreateGoalSettings") {
 
240
                unsigned short returnValue;
 
241
                OpenDRIM_SSHCapabilities_CreateGoalSettings_In inArgs;
 
242
                SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, in, inArgs);
 
243
                OpenDRIM_SSHCapabilities_CreateGoalSettings_Out outArgs;
 
244
                
 
245
                errorCode = SSH_OpenDRIM_SSHCapabilities_CreateGoalSettings(_broker, ctx, instance, returnValue, inArgs, outArgs, errorMessage);
 
246
                if (errorCode != OK) {
 
247
                        errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
248
                        CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
 
249
                        return rc;
 
250
                }
 
251
                SSH_OpenDRIM_SSHCapabilities_toCMPIArg(_broker, out, outArgs);
 
252
                
 
253
                CMPIValue value = CT_toCMPI(returnValue);
 
254
                CMReturnData(rslt, &value.uint16, CMPI_uint16);
 
255
        }
 
256
        else {
 
257
                errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + "The requested method (" + (string) methodName +") was not found.";
 
258
                CMSetStatusWithChars(_broker, &rc, (CMPIrc) NOT_SUPPORTED, errorMessage.c_str());
 
259
                return rc;
 
260
        }
 
261
        CMReturnDone(rslt);
 
262
        _L_;
 
263
        CMReturn(CMPI_RC_OK);
 
264
}
 
265
 
 
266
/* ---------------------------------------------------------------------------*/
 
267
/*                    End of Method Provider Interface                        */
 
268
/* ---------------------------------------------------------------------------*/
 
269
 
 
270
/* ---------------------------------------------------------------------------*/
 
271
/*                              Provider Factory                              */
 
272
/* ---------------------------------------------------------------------------*/
 
273
 
 
274
int SSH_OpenDRIM_SSHCapabilities_init(const CMPIBroker* broker) {
 
275
        _E_;
 
276
        _broker = broker;
 
277
        static bool initialized = false;
 
278
        if (!initialized) {
 
279
                string errorMessage;
 
280
                int errorCode = SSH_OpenDRIM_SSHCapabilities_load(broker, errorMessage);
 
281
                if (errorCode != OK) {
 
282
                        errorMessage += "SSH_OpenDRIM_SSHCapabilities_init FAILED: " + (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
283
                        string cmd = "/bin/echo \"" + errorMessage + "\" >> cmpi_prov_debug.txt";
 
284
                        system(cmd.c_str());
 
285
                        return -1;
 
286
                }
 
287
                initialized = true;
 
288
        }
 
289
        _L_;
 
290
        return OK;
 
291
}
 
292
 
 
293
int SSH_OpenDRIM_SSHCapabilities_finalize() {
 
294
        _E_;
 
295
        static bool finalized = false;
 
296
        if (!finalized) {
 
297
                string errorMessage;
 
298
                int errorCode = SSH_OpenDRIM_SSHCapabilities_unload(errorMessage);
 
299
                if (errorCode != OK) {
 
300
                        errorMessage += "SSH_OpenDRIM_SSHCapabilities_unload FAILED: " + (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
 
301
                        string cmd = "/bin/echo \"" + errorMessage + "\" >> cmpi_prov_debug.txt";
 
302
                        system(cmd.c_str());
 
303
                        return errorCode;
 
304
                }
 
305
                finalized = true;
 
306
        }
 
307
        _L_;
 
308
        return OK;
 
309
}
 
310
 
 
311
#define SSH_OpenDRIM_SSHCapabilities_INIT if (SSH_OpenDRIM_SSHCapabilities_init(_broker) < 0) return NULL
 
312
 
 
313
CMInstanceMIStub(SSH_OpenDRIM_SSHCapabilitiesProvider, SSH_OpenDRIM_SSHCapabilitiesProvider, _broker, SSH_OpenDRIM_SSHCapabilities_INIT);
 
314
CMMethodMIStub(SSH_OpenDRIM_SSHCapabilitiesProvider, SSH_OpenDRIM_SSHCapabilitiesProvider, _broker, SSH_OpenDRIM_SSHCapabilities_INIT);
 
315
 
 
316
/* ---------------------------------------------------------------------------*/
 
317
/*                          End of Provider Factory                           */
 
318
/* ---------------------------------------------------------------------------*/