1 karl 1.14 //%2006////////////////////////////////////////////////////////////////////////
|
2 schuur 1.1 //
|
3 karl 1.7 // 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 // IBM Corp.; EMC Corporation, The Open Group.
7 // 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.10 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 karl 1.14 // 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.7 //
|
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 //%/////////////////////////////////////////////////////////////////////////////
33
|
34 schuur 1.6 #include "CMPI_Version.h"
35
|
36 schuur 1.1 #include "CMPIProviderModule.h"
37
38 #include <Pegasus/Common/FileSystem.h>
39 #include <Pegasus/Common/MessageLoader.h> //l10n
40 #include <Pegasus/Config/ConfigManager.h>
41 #include <Pegasus/ProviderManager2/CMPI/CMPIProvider.h>
42 #include <Pegasus/ProviderManager2/CMPI/CMPIProviderManager.h>
43
|
44 schuur 1.3 PEGASUS_USING_STD;
|
45 schuur 1.1 PEGASUS_NAMESPACE_BEGIN
46
|
47 schuur 1.6 CMPIProviderModule::CMPIProviderModule(const String & fileName)
|
48 schuur 1.1 {
|
49 schuur 1.6 genericProviderModule=0;
|
50 kumpf 1.15
51 String resolvedFileName;
52
|
53 a.dunfey 1.5 #ifdef PEGASUS_OS_TYPE_WINDOWS
54 if (fileName[1] != ':')
55 #else
|
56 schuur 1.1 if (fileName[0]!='/')
|
57 a.dunfey 1.5 #endif
|
58 kumpf 1.15 resolvedFileName=ProviderManager::_resolvePhysicalName(fileName);
59 else resolvedFileName=fileName;
60
61 _library = DynamicLibrary(resolvedFileName);
|
62 schuur 1.1 }
63
64 CMPIProviderModule::~CMPIProviderModule(void)
65 {
66 }
67
68 ProviderVector CMPIProviderModule::load(const String & providerName)
69 {
|
70 kumpf 1.15 String realProviderName(providerName);
71 realProviderName.remove(0,1);
|
72 schuur 1.1
|
73 kumpf 1.16 if (!_library.load())
|
74 schuur 1.1 {
75
|
76 konrad.r 1.12 throw Exception(MessageLoaderParms("ProviderManager.CMPI.CMPIProviderModule.CANNOT_LOAD_LIBRARY",
77 "ProviderLoadFailure: ($0:$1):Cannot load library, error: $2",
|
78 kumpf 1.15 _library.getFileName(),
|
79 konrad.r 1.12 realProviderName,
|
80 kumpf 1.15 _library.getLoadErrorMessage()));
|
81 schuur 1.1 }
82
83 char symbolName[512];
|
84 marek 1.11 CString mName=realProviderName.getCString();
|
85 schuur 1.1 ProviderVector miVector;
86 memset(&miVector,0,sizeof(ProviderVector));
87 int specificMode=0;
88
89 if ((miVector.createGenInstMI=(CREATE_GEN_INST_MI)
|
90 kumpf 1.15 _library.getSymbol(_Generic_Create_InstanceMI))) {
|
91 schuur 1.2 if (miVector.createGenInstMI)
92 miVector.miTypes|=CMPI_MIType_Instance;
|
93 schuur 1.1 miVector.genericMode=1;
94 }
95
96 strcpy(symbolName,(const char*)mName);
|
97 konrad.r 1.12 strcat(symbolName,_Create_InstanceMI);
|
98 schuur 1.1 if ((miVector.createInstMI=(CREATE_INST_MI)
|
99 kumpf 1.15 _library.getSymbol(symbolName))) {
|
100 schuur 1.2 if (miVector.createInstMI)
101 miVector.miTypes|=CMPI_MIType_Instance;
|
102 schuur 1.1 specificMode=1;
103 }
104
105
106 if ((miVector.createGenAssocMI=(CREATE_GEN_ASSOC_MI)
|
107 kumpf 1.15 _library.getSymbol(_Generic_Create_AssociationMI))) {
|
108 schuur 1.2 if (miVector.createGenAssocMI)
109 miVector.miTypes|=CMPI_MIType_Association;
|
110 schuur 1.1 miVector.genericMode=1;
111 }
112
113 strcpy(symbolName,(const char*)mName);
|
114 konrad.r 1.12 strcat(symbolName,_Create_AssociationMI);
|
115 schuur 1.1 if ((miVector.createAssocMI=(CREATE_ASSOC_MI)
|
116 kumpf 1.15 _library.getSymbol(symbolName))) {
|
117 schuur 1.2 if (miVector.createAssocMI)
118 miVector.miTypes|=CMPI_MIType_Association;
|
119 schuur 1.1 specificMode=1;
120 }
121
122
123 if ((miVector.createGenMethMI=(CREATE_GEN_METH_MI)
|
124 kumpf 1.15 _library.getSymbol(_Generic_Create_MethodMI))) {
|
125 schuur 1.2 if (miVector.createGenMethMI)
126 miVector.miTypes|=CMPI_MIType_Method;
|
127 schuur 1.1 miVector.genericMode=1;
128 }
129
130 strcpy(symbolName,(const char*)mName);
|
131 konrad.r 1.12 strcat(symbolName,_Create_MethodMI);
|
132 schuur 1.1 if ((miVector.createMethMI=(CREATE_METH_MI)
|
133 kumpf 1.15 _library.getSymbol(symbolName))) {
|
134 schuur 1.2 if (miVector.createMethMI)
135 miVector.miTypes|=CMPI_MIType_Method;
|
136 schuur 1.1 specificMode=1;
137 }
138
139
140 if ((miVector.createGenPropMI=(CREATE_GEN_PROP_MI)
|
141 kumpf 1.15 _library.getSymbol(_Generic_Create_PropertyMI))) {
|
142 schuur 1.2 if (miVector.createGenPropMI)
143 miVector.miTypes|=CMPI_MIType_Property;
|
144 schuur 1.1 miVector.genericMode=1;
145 }
146
147 strcpy(symbolName,(const char*)mName);
|
148 konrad.r 1.12 strcat(symbolName,_Create_PropertyMI);
|
149 schuur 1.1 if ((miVector.createPropMI=(CREATE_PROP_MI)
|
150 kumpf 1.15 _library.getSymbol(symbolName))) {
|
151 schuur 1.2 if (miVector.createPropMI)
152 miVector.miTypes|=CMPI_MIType_Property;
|
153 schuur 1.1 specificMode=1;
154 }
155
156
157 if ((miVector.createGenIndMI=(CREATE_GEN_IND_MI)
|
158 kumpf 1.15 _library.getSymbol(_Generic_Create_IndicationMI))) {
|
159 schuur 1.2 if (miVector.createGenIndMI)
160 miVector.miTypes|=CMPI_MIType_Indication;
|
161 schuur 1.1 miVector.genericMode=1;
162 }
163
164 strcpy(symbolName,(const char*)mName);
|
165 konrad.r 1.12 strcat(symbolName,_Create_IndicationMI);
|
166 schuur 1.1 if ((miVector.createIndMI=(CREATE_IND_MI)
|
167 kumpf 1.15 _library.getSymbol(symbolName))) {
|
168 schuur 1.2 if (miVector.createIndMI)
169 miVector.miTypes|=CMPI_MIType_Indication;
|
170 schuur 1.1 specificMode=1;
171 }
172
173 if (miVector.miTypes==0) {
|
174 kumpf 1.16 _library.unload();
|
175 konrad.r 1.12 throw Exception(MessageLoaderParms("ProviderManager.CMPI.CMPIProviderModule.WRONG_LIBRARY",
176 "ProviderLoadFailure: ($0) Provider is not a CMPI style provider. Cannot find $1_Create<mi-type>MI symbol.",
|
177 kumpf 1.15 _library.getFileName(),
|
178 konrad.r 1.12 realProviderName));
|
179 schuur 1.1 }
180
181 if (miVector.genericMode && specificMode) {
|
182 kumpf 1.16 _library.unload();
|
183 konrad.r 1.12 throw Exception(MessageLoaderParms("ProviderManager.CMPI.CMPIProviderModule.CONFLICTING_CMPI_STYLE",
184 "ProviderLoadFailure: ($0:$1) conflicting generic/specfic CMPI style provider.",
|
185 kumpf 1.15 _library.getFileName(),
|
186 konrad.r 1.12 realProviderName));
|
187 schuur 1.1 }
188
|
189 schuur 1.6 genericProviderModule=miVector.genericMode!=0;
|
190 schuur 1.1
191 return miVector;
192 }
193
194 void CMPIProviderModule::unloadModule(void)
195 {
|
196 kumpf 1.16 _library.unload();
|
197 schuur 1.1 }
198
199 PEGASUS_NAMESPACE_END
|