(file) Return to DynamicListener.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / DynListener

  1 karl  1.5 //%2006////////////////////////////////////////////////////////////////////////
  2 h.sterling 1.1 //
  3                // 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                // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10                // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11 karl       1.5 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 12                // EMC Corporation; Symantec Corporation; The Open Group.
 13 h.sterling 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                // 
 21                // 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                // Author: Heather Sterling (hsterl@us.ibm.com)
 33                //
 34 h.sterling 1.1 // Modified By: 
 35                //
 36                //%/////////////////////////////////////////////////////////////////////////////
 37                
 38                #include "DynamicListener.h"
 39                #include "ListenerService.h"
 40                #include "ConsumerManager.h"
 41                
 42                #include <Pegasus/Common/Config.h>
 43                #include <Pegasus/Common/Exception.h>
 44                #include <Pegasus/Common/SSLContext.h>
 45                #include <Pegasus/Common/Monitor.h>
 46                #include <Pegasus/Common/HTTPAcceptor.h>
 47                #include <Pegasus/Common/PegasusVersion.h>
 48                #include <Pegasus/Common/Tracer.h>
 49                
 50                #include <Pegasus/Common/HashTable.h>
 51                #include <Pegasus/Common/FileSystem.h>
 52                
 53                #include <Pegasus/ExportServer/CIMExportResponseEncoder.h>
 54                #include <Pegasus/ExportServer/CIMExportRequestDecoder.h>
 55 h.sterling 1.1 
 56                PEGASUS_NAMESPACE_BEGIN
 57                PEGASUS_USING_STD;
 58                
 59                
 60                const Boolean DynamicListener::DEFAULT_CONSUMER_UNLOAD = true;
 61                const Uint32 DynamicListener::DEFAULT_IDLE_TIMEOUT = 300000; //ms
 62                const Boolean DynamicListener::DEFAULT_FORCE_SHUTDOWN = false;
 63                const Uint32 DynamicListener::DEFAULT_SHUTDOWN_TIMEOUT = 10000; //ms
 64                
 65                
 66                /////////////////////////////////////////////////////////////////////////////
 67                // DynamicListenerRep
 68                /////////////////////////////////////////////////////////////////////////////
 69                
 70                //This class is used to stabilize the DynamicListener external interface.
 71                
 72                class DynamicListenerRep
 73                {
 74                public:
 75                
 76 h.sterling 1.1     DynamicListenerRep(Uint32 portNumber, 
 77                                       const String& consumerDir, 
 78                                       const String& consumerConfigDir,
 79                                       SSLContext* sslContext,
 80                                       Boolean enableConsumerUnload, 
 81                                       Uint32 consumerIdleTimeout, 
 82                                       Uint32 shutdownTimeout);
 83                
 84                    ~DynamicListenerRep();
 85                
 86                    void start();
 87                
 88                    void stop(Boolean forceShutdown);
 89                
 90                    Boolean isAlive();
 91                
 92                    Boolean addConsumer(const String& consumerName, const String& location = String::EMPTY);
 93                
 94                    Boolean removeConsumer(const String& consumerName);
 95                
 96                    Uint32 getPortNumber();
 97 h.sterling 1.1 
 98                    String getConsumerDir();
 99                
100                    String getConsumerConfigDir();
101                
102                    void setEnableConsumerUnload(Boolean consumerUnload);
103                
104                    Boolean getEnableConsumerUnload();
105                
106 gs.keenan  1.4     void setIdleTimeout(Uint32 idleTimeout);
107 h.sterling 1.1 
108                    Uint32 getIdleTimeout(); 
109                
110                private:
111                
112                    // core components
113                    ListenerService* _listenerService; 
114                    ConsumerManager* _consumerManager;
115                
116                    // config properties -- do we want to separate these out????
117                    Uint32 _port;
118                    SSLContext* _sslContext;
119                };
120                
121                DynamicListenerRep::DynamicListenerRep(Uint32 portNumber, 
122                                                       const String& consumerDir,           //consumer mgr  
123                                                       const String& consumerConfigDir,     //consumer mgr
124                                                       SSLContext* sslContext,              //listener svc
125                                                       Boolean enableConsumerUnload,        //consumer mgr
126                                                       Uint32 consumerIdleTimeout,          //consumer mgr
127                                                       Uint32 shutdownTimeout) :            //???
128 h.sterling 1.1 _port(portNumber),
129                _sslContext(sslContext)             
130                {
131                    PEG_METHOD_ENTER(TRC_LISTENER, "DynamicListenerRep::DynamicListenerRep");
132                
133                    _consumerManager = new ConsumerManager(consumerDir, consumerConfigDir, enableConsumerUnload, consumerIdleTimeout);
134                
135                    _listenerService = new ListenerService(_consumerManager);
136                
137                    PEG_METHOD_EXIT();
138                }
139                
140                DynamicListenerRep::~DynamicListenerRep()
141                {
142                    PEG_METHOD_ENTER(TRC_LISTENER, "DynamicListenerRep::~DynamicListenerRep");
143                
144 kumpf      1.6     delete _consumerManager;
145 h.sterling 1.1 
146 kumpf      1.6     delete _listenerService;
147 h.sterling 1.1 
148                    PEG_METHOD_EXIT();
149                }
150                
151                void DynamicListenerRep::start()
152                {
153                    PEG_METHOD_ENTER(TRC_LISTENER, "DynamicListenerRep::start");
154                
155                    if (_sslContext)
156                    {
157                        _listenerService->initializeListener(_port, true, _sslContext);
158                
159                    } else
160                    {
161                        _listenerService->initializeListener(_port, false, 0);
162                    }
163                
164                    _listenerService->runListener();
165                
166                    PEG_METHOD_EXIT();  
167                }
168 h.sterling 1.1 
169                void DynamicListenerRep::stop(Boolean forceShutdown)
170                {
171                    PEG_METHOD_ENTER(TRC_LISTENER, "DynamicListenerRep::stop");
172                
173                    _listenerService->shutdownListener();
174                
175                    PEG_METHOD_EXIT();
176                }
177                
178                Boolean DynamicListenerRep::isAlive()
179                {
180                    return _listenerService->isAlive();
181                }
182                
183                //TODO: 
184                Boolean DynamicListenerRep::addConsumer(const String& consumerName, const String& location)
185                {
186                    return true;
187                    //return _consumerManager->addConsumer(consumerName, location);
188                }
189 h.sterling 1.1 
190                //TODO:
191                Boolean DynamicListenerRep::removeConsumer(const String& consumerName)
192                {
193                    return true;
194                    //return _consumerManager->unloadConsumer(consumerName);
195                }
196                
197                Uint32 DynamicListenerRep::getPortNumber() 
198                {
199                    return _listenerService->getPortNumber();
200                }
201                
202                String DynamicListenerRep::getConsumerDir()
203                {
204                    return _consumerManager->getConsumerDir();
205                }
206                
207                String DynamicListenerRep::getConsumerConfigDir()
208                {
209                    return _consumerManager->getConsumerConfigDir();
210 h.sterling 1.1 }
211                
212                Boolean DynamicListenerRep::getEnableConsumerUnload()
213                {
214                    return _consumerManager->getEnableConsumerUnload();
215                }
216                
217                void DynamicListenerRep::setEnableConsumerUnload(Boolean enableConsumerUnload)
218                {
219                //do nothing for now
220                }
221                
222                Uint32 DynamicListenerRep::getIdleTimeout()
223                {
224                    return _consumerManager->getIdleTimeout();
225                }
226                
227 gs.keenan  1.3 void DynamicListenerRep::setIdleTimeout(Uint32 idleTimeout)
228 h.sterling 1.1 {
229                //do nothing for now
230                }
231                
232                
233                /////////////////////////////////////////////////////////////////////////////
234                // DynamicListener
235                /////////////////////////////////////////////////////////////////////////////
236                
237                DynamicListener::DynamicListener(Uint32 portNumber, 
238                                                 const String& consumerDir, 
239                                                 const String& consumerConfigDir,
240                                                 Boolean enableConsumerUnload, 
241                                                 Uint32 consumerIdleTimeout, 
242                                                 Uint32 shutdownTimeout) 
243                {
244                    _rep = new DynamicListenerRep(portNumber, 
245                                                  consumerDir,           
246                                                  consumerConfigDir,     
247                                                  0,             
248                                                  enableConsumerUnload,   
249 h.sterling 1.1                                   consumerIdleTimeout,  
250                                                  shutdownTimeout);
251                }
252                
253                #ifdef PEGASUS_HAS_SSL
254                DynamicListener::DynamicListener(Uint32 portNumber, 
255                                                 const String& consumerDir,
256                                                 const String& consumerConfigDir,
257                                                 Boolean useSSL, 
258                                                 const String& keyPath, 
259                                                 const String& certPath,
260                                                 Boolean enableConsumerUnload, 
261                                                 Uint32 consumerIdleTimeout, 
262                                                 Uint32 shutdownTimeout)     //ONLY IF PEGASUS_HAS_SSL
263                {
264                    SSLContext* sslContext = 0;
265                    if (useSSL)
266                    {
267                        sslContext = new SSLContext(String::EMPTY, certPath, keyPath, 0, String::EMPTY);//randFile);
268                    }
269                
270 h.sterling 1.1     _rep = new DynamicListenerRep(portNumber, 
271                                                  consumerDir,           
272                                                  consumerConfigDir,     
273                                                  sslContext,             
274                                                  enableConsumerUnload,   
275                                                  consumerIdleTimeout,  
276                                                  shutdownTimeout);
277                }
278                
279                DynamicListener::DynamicListener(Uint32 portNumber, 
280                                                 const String& consumerDir,
281                                                 const String& consumerConfigDir,
282                                                 Boolean useSSL, 
283                                                 SSLContext* sslContext,
284                                                 Boolean enableConsumerUnload, 
285                                                 Uint32 consumerIdleTimeout, 
286                                                 Uint32 shutdownTimeout)     //ONLY IF PEGASUS_HAS_SSL
287                {
288                    _rep = new DynamicListenerRep(portNumber, 
289                                                  consumerDir,           
290                                                  consumerConfigDir,     
291 h.sterling 1.1                                   sslContext,             
292                                                  enableConsumerUnload,   
293                                                  consumerIdleTimeout,  
294                                                  shutdownTimeout);
295                }
296                #endif
297                
298                DynamicListener::~DynamicListener()
299                {
300 kumpf      1.6     delete static_cast<DynamicListenerRep*>(_rep);
301 h.sterling 1.1 }
302                
303                void DynamicListener::start()
304                {
305                    static_cast<DynamicListenerRep*>(_rep)->start();
306                }
307                
308                void DynamicListener::stop(Boolean forceShutdown)
309                {
310                    static_cast<DynamicListenerRep*>(_rep)->stop(forceShutdown);
311                }
312                
313                Boolean DynamicListener::isAlive()
314                {
315                    return static_cast<DynamicListenerRep*>(_rep)->isAlive();
316                }
317                
318                Boolean DynamicListener::addConsumer(const String& consumerName, const String& location)
319                {
320                    return static_cast<DynamicListenerRep*>(_rep)->addConsumer(consumerName, location);
321                }
322 h.sterling 1.1 
323                Boolean DynamicListener::removeConsumer(const String& consumerName)
324                {
325                    return static_cast<DynamicListenerRep*>(_rep)->removeConsumer(consumerName);
326                }
327                
328                Uint32 DynamicListener::getPortNumber() 
329                {
330                    return static_cast<DynamicListenerRep*>(_rep)->getPortNumber();
331                }
332                
333                String DynamicListener::getConsumerDir() 
334                {
335                    return static_cast<DynamicListenerRep*>(_rep)->getConsumerDir();
336                } 
337                
338                String DynamicListener::getConsumerConfigDir() 
339                {
340                    return static_cast<DynamicListenerRep*>(_rep)->getConsumerConfigDir();
341                } 
342                
343 h.sterling 1.1 void DynamicListener::setEnableConsumerUnload(const Boolean consumerUnload)
344                {
345                    static_cast<DynamicListenerRep*>(_rep)->setEnableConsumerUnload(consumerUnload);
346                }
347                
348                Boolean DynamicListener::getEnableConsumerUnload()
349                {
350                    return static_cast<DynamicListenerRep*>(_rep)->getEnableConsumerUnload();
351                }
352                
353                Uint32 DynamicListener::getIdleTimeout() 
354                {
355                    return static_cast<DynamicListenerRep*>(_rep)->getIdleTimeout();
356                }
357                
358 gs.keenan  1.3 void DynamicListener::setIdleTimeout(Uint32 idleTimeout)
359 h.sterling 1.1 {
360                    static_cast<DynamicListenerRep*>(_rep)->setIdleTimeout(idleTimeout);
361                }
362                
363                
364                PEGASUS_NAMESPACE_END
365                

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2