1
/*###############################################################################
2
# Linux Management Providers (LMP), SSH provider package
3
# Copyright (C) 2010 Feng Zhanlei, REDFLAG <fengzhanlei@redflag-linux.com>
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
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
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.
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
#################################################################################
24
#################################################################################
25
# To contributors, please leave your contact information in this section
26
# AND comment your changes in the source code.
28
# Modified by Guillaume BOTTEX <guillaumebottex@uxsystem.net>, UXSystem, 2010
29
###############################################################################*/
31
#include "cmpiOpenDRIM_SSHCapabilities.h"
32
#include "OpenDRIM_SSHCapabilitiesAccess.h"
34
static const CMPIBroker * _broker;
37
#define SSH_OpenDRIM_SSHCapabilitiesProviderSetInstance SSH_OpenDRIM_SSHCapabilitiesProviderModifyInstance
40
int SSH_OpenDRIM_SSHCapabilities_init(const CMPIBroker* broker);
42
int SSH_OpenDRIM_SSHCapabilities_finalize();
44
/* ---------------------------------------------------------------------------*/
45
/* Instance Provider Interface */
46
/* ---------------------------------------------------------------------------*/
48
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderCleanup(CMPIInstanceMI * mi, const CMPIContext* ctx, CMPIBoolean terminate) {
50
int errorCode = SSH_OpenDRIM_SSHCapabilities_finalize();
52
CMSetStatus(&rc, (CMPIrc) errorCode);
57
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderEnumInstanceNames(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* ref) {
59
CMPIStatus rc = {CMPI_RC_OK, NULL};
60
vector<OpenDRIM_SSHCapabilities> instances;
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());
69
for (size_t i=0; i < instances.size(); i++) {
70
CMPIObjectPath* op = SSH_OpenDRIM_SSHCapabilities_toCMPIObjectPath(_broker, instances[i]);
71
CMReturnObjectPath(rslt, op);
78
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderEnumInstances(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* ref, const char** properties) {
80
CMPIStatus rc = {CMPI_RC_OK, NULL};
81
vector<OpenDRIM_SSHCapabilities> instances;
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());
90
for (size_t i=0; i < instances.size(); i++) {
91
CMPIInstance* ci = SSH_OpenDRIM_SSHCapabilities_toCMPIInstance(_broker, instances[i]);
92
CMReturnInstance(rslt, ci);
99
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderGetInstance(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* cop, const char** properties) {
101
CMPIStatus rc = {CMPI_RC_OK, NULL};
102
OpenDRIM_SSHCapabilities instance;
103
SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, cop, instance);
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());
112
CMPIInstance* ci = SSH_OpenDRIM_SSHCapabilities_toCMPIInstance(_broker, instance);
113
CMReturnInstance(rslt, ci);
119
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderSetInstance(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* cop, const CMPIInstance* ci, const char** properties) {
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);
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());
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());
144
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderCreateInstance(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* cop, const CMPIInstance* ci) {
146
CMPIStatus rc = {CMPI_RC_OK, NULL};
147
OpenDRIM_SSHCapabilities instance;
148
SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, ci, instance);
151
int errorCode = SSH_OpenDRIM_SSHCapabilities_getInstance(_broker, ctx, instance, NULL, errorMessage);
152
if (errorCode != NOT_FOUND) {
154
errorCode = ALREADY_EXISTS;
155
errorMessage = (string) OpenDRIM_SSHCapabilities_classnames[0] + ": " + errorMessage;
156
CMSetStatusWithChars(_broker, &rc, (CMPIrc) errorCode, errorMessage.c_str());
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());
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());
171
CMPIObjectPath* _cop = SSH_OpenDRIM_SSHCapabilities_toCMPIObjectPath(_broker, instance);
172
CMReturnObjectPath(rslt, _cop);
178
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderDeleteInstance(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* cop) {
180
CMPIStatus rc = {CMPI_RC_OK, NULL};
181
OpenDRIM_SSHCapabilities instance;
182
SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, cop, instance);
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());
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());
202
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderExecQuery(CMPIInstanceMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* ref, const char* lang, const char* query) {
204
CMReturn(CMPI_RC_ERR_NOT_SUPPORTED);
207
/* ---------------------------------------------------------------------------*/
208
/* End of Instance Provider Interface */
209
/* ---------------------------------------------------------------------------*/
211
/* ---------------------------------------------------------------------------*/
212
/* Method Provider Interface */
213
/* ---------------------------------------------------------------------------*/
215
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderMethodCleanup(CMPIMethodMI * mi, const CMPIContext * ctx, CMPIBoolean terminate) {
217
int errorCode = SSH_OpenDRIM_SSHCapabilities_finalize();
219
CMSetStatus(&rc, (CMPIrc) errorCode);
224
CMPIStatus SSH_OpenDRIM_SSHCapabilitiesProviderInvokeMethod(CMPIMethodMI* mi, const CMPIContext* ctx, const CMPIResult* rslt, const CMPIObjectPath* ref, const char* methodName, const CMPIArgs* in, CMPIArgs* out) {
226
CMPIStatus rc = {CMPI_RC_OK, NULL};
227
OpenDRIM_SSHCapabilities instance;
228
SSH_OpenDRIM_SSHCapabilities_toCPP(_broker, ref, instance);
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());
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;
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());
251
SSH_OpenDRIM_SSHCapabilities_toCMPIArg(_broker, out, outArgs);
253
CMPIValue value = CT_toCMPI(returnValue);
254
CMReturnData(rslt, &value.uint16, CMPI_uint16);
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());
263
CMReturn(CMPI_RC_OK);
266
/* ---------------------------------------------------------------------------*/
267
/* End of Method Provider Interface */
268
/* ---------------------------------------------------------------------------*/
270
/* ---------------------------------------------------------------------------*/
271
/* Provider Factory */
272
/* ---------------------------------------------------------------------------*/
274
int SSH_OpenDRIM_SSHCapabilities_init(const CMPIBroker* broker) {
277
static bool initialized = false;
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";
293
int SSH_OpenDRIM_SSHCapabilities_finalize() {
295
static bool finalized = false;
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";
311
#define SSH_OpenDRIM_SSHCapabilities_INIT if (SSH_OpenDRIM_SSHCapabilities_init(_broker) < 0) return NULL
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);
316
/* ---------------------------------------------------------------------------*/
317
/* End of Provider Factory */
318
/* ---------------------------------------------------------------------------*/