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

  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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2