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

  1 martin 1.8 //%LICENSE////////////////////////////////////////////////////////////////
  2 martin 1.9 //
  3 martin 1.8 // Licensed to The Open Group (TOG) under one or more contributor license
  4            // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
  5            // this work for additional information regarding copyright ownership.
  6            // Each contributor licenses this file to you under the OpenPegasus Open
  7            // Source License; you may not use this file except in compliance with the
  8            // License.
  9 martin 1.9 //
 10 martin 1.8 // Permission is hereby granted, free of charge, to any person obtaining a
 11            // copy of this software and associated documentation files (the "Software"),
 12            // to deal in the Software without restriction, including without limitation
 13            // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 14            // and/or sell copies of the Software, and to permit persons to whom the
 15            // Software is furnished to do so, subject to the following conditions:
 16 martin 1.9 //
 17 martin 1.8 // The above copyright notice and this permission notice shall be included
 18            // in all copies or substantial portions of the Software.
 19 martin 1.9 //
 20 martin 1.8 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 21 martin 1.9 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 22 martin 1.8 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 23            // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 24            // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 25            // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 26            // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 27 martin 1.9 //
 28 martin 1.8 //////////////////////////////////////////////////////////////////////////
 29 h.sterling 1.1 //
 30 marek      1.7 //%////////////////////////////////////////////////////////////////////////////
 31 h.sterling 1.1 
 32                #include "DynamicListener.h"
 33                #include "ListenerService.h"
 34                #include "ConsumerManager.h"
 35                
 36                #include <Pegasus/Common/Config.h>
 37                #include <Pegasus/Common/Exception.h>
 38                #include <Pegasus/Common/SSLContext.h>
 39                #include <Pegasus/Common/Monitor.h>
 40                #include <Pegasus/Common/HTTPAcceptor.h>
 41                #include <Pegasus/Common/PegasusVersion.h>
 42                #include <Pegasus/Common/Tracer.h>
 43                
 44                #include <Pegasus/Common/HashTable.h>
 45                #include <Pegasus/Common/FileSystem.h>
 46 venkat.puvvada 1.11 #include <Pegasus/General/SSLContextManager.h>
 47 h.sterling     1.1  
 48                     #include <Pegasus/ExportServer/CIMExportResponseEncoder.h>
 49                     #include <Pegasus/ExportServer/CIMExportRequestDecoder.h>
 50                     
 51                     PEGASUS_NAMESPACE_BEGIN
 52                     PEGASUS_USING_STD;
 53                     
 54                     
 55                     const Boolean DynamicListener::DEFAULT_CONSUMER_UNLOAD = true;
 56                     const Uint32 DynamicListener::DEFAULT_IDLE_TIMEOUT = 300000; //ms
 57                     const Boolean DynamicListener::DEFAULT_FORCE_SHUTDOWN = false;
 58                     const Uint32 DynamicListener::DEFAULT_SHUTDOWN_TIMEOUT = 10000; //ms
 59                     
 60                     
 61                     /////////////////////////////////////////////////////////////////////////////
 62                     // DynamicListenerRep
 63                     /////////////////////////////////////////////////////////////////////////////
 64                     
 65                     //This class is used to stabilize the DynamicListener external interface.
 66                     
 67                     class DynamicListenerRep
 68 h.sterling     1.1  {
 69                     public:
 70                     
 71 kumpf          1.10     DynamicListenerRep(Uint32 portNumber,
 72                                            const String& consumerDir,
 73 h.sterling     1.1                         const String& consumerConfigDir,
 74                                            SSLContext* sslContext,
 75 venkat.puvvada 1.11                        ReadWriteSem*  _sslContextObjectLock,
 76 kumpf          1.10                        Boolean enableConsumerUnload,
 77                                            Uint32 consumerIdleTimeout,
 78 h.sterling     1.1                         Uint32 shutdownTimeout);
 79                     
 80 venkat.puvvada 1.11     DynamicListenerRep(
 81                             Uint32 portNumber,
 82                             const String& consumerDir,
 83                             const String& consumerConfigDir,
 84                             Boolean useSSL,
 85                             const String& keyPath,
 86                             const String& certPath,
 87                             Boolean enableConsumerUnload,
 88                             Uint32 consumerIdleTimeout,
 89 anusha.kandepu 1.13         Uint32 shutdownTimeout,
 90                             const String & sslCipherSuite="DEFAULT");
 91 venkat.puvvada 1.11 
 92 h.sterling     1.1      ~DynamicListenerRep();
 93                     
 94                         void start();
 95                     
 96                         void stop(Boolean forceShutdown);
 97                     
 98                         Boolean isAlive();
 99                     
100 marek          1.7      Boolean addConsumer(
101                                     const String& consumerName,
102                                     const String& location = String::EMPTY);
103 h.sterling     1.1  
104                         Boolean removeConsumer(const String& consumerName);
105                     
106                         Uint32 getPortNumber();
107                     
108                         String getConsumerDir();
109                     
110                         String getConsumerConfigDir();
111                     
112                         void setEnableConsumerUnload(Boolean consumerUnload);
113                     
114                         Boolean getEnableConsumerUnload();
115                     
116 gs.keenan      1.4      void setIdleTimeout(Uint32 idleTimeout);
117 h.sterling     1.1  
118 kumpf          1.10     Uint32 getIdleTimeout();
119 h.sterling     1.1  
120                     private:
121                     
122                         // core components
123 kumpf          1.10     ListenerService* _listenerService;
124 h.sterling     1.1      ConsumerManager* _consumerManager;
125                     
126                         // config properties -- do we want to separate these out????
127                         Uint32 _port;
128                         SSLContext* _sslContext;
129 venkat.puvvada 1.11     ReadWriteSem*  _sslContextObjectLock;
130                         SSLContextManager *_sslContextMgr;
131 h.sterling     1.1  };
132                     
133 marek          1.7  DynamicListenerRep::DynamicListenerRep(
134 kumpf          1.10     Uint32 portNumber,
135 marek          1.7      const String& consumerDir,             //consumer mgr
136                         const String& consumerConfigDir,       //consumer mgr
137                         SSLContext* sslContext,                //listener svc
138 venkat.puvvada 1.11     ReadWriteSem*  sslContextObjectLock,  // lock for accessing the ssl context
139 marek          1.7      Boolean enableConsumerUnload,          //consumer mgr
140                         Uint32 consumerIdleTimeout,            //consumer mgr
141 venkat.puvvada 1.11     Uint32 shutdownTimeout) :
142                             _port(portNumber),
143                             _sslContext(sslContext),
144                             _sslContextObjectLock(sslContextObjectLock),
145                             _sslContextMgr(0)
146 h.sterling     1.1  {
147                         PEG_METHOD_ENTER(TRC_LISTENER, "DynamicListenerRep::DynamicListenerRep");
148                     
149 marek          1.7      _consumerManager = new ConsumerManager(
150                                                    consumerDir,
151                                                    consumerConfigDir,
152                                                    enableConsumerUnload,
153                                                    consumerIdleTimeout);
154 h.sterling     1.1  
155                         _listenerService = new ListenerService(_consumerManager);
156                     
157                         PEG_METHOD_EXIT();
158                     }
159                     
160 venkat.puvvada 1.11 DynamicListenerRep::DynamicListenerRep(
161                         Uint32 portNumber,
162                         const String& consumerDir,             
163                         const String& consumerConfigDir,       
164                         Boolean useSSL,
165                         const String& keyPath,
166                         const String& certPath,
167                         Boolean enableConsumerUnload,          
168                         Uint32 consumerIdleTimeout,            
169 anusha.kandepu 1.13     Uint32 shutdownTimeout,
170                         const String & sslCipherSuite) :
171 venkat.puvvada 1.11         _port(portNumber),
172                             _sslContext(0),
173                             _sslContextObjectLock(0),
174                             _sslContextMgr(0)
175                     {
176                         PEG_METHOD_ENTER(TRC_LISTENER, "DynamicListenerRep::DynamicListenerRep");
177                         
178 s.kodali       1.12 #ifdef PEGASUS_HAS_SSL
179 venkat.puvvada 1.11     if (useSSL)
180                         {
181                             _sslContextMgr = new SSLContextManager();
182                             _sslContextMgr->createSSLContext(
183                                 String(),
184                                 certPath,
185                                 keyPath,
186                                 String(),
187                                 true,
188                                 String(),
189 anusha.kandepu 1.13             sslCipherSuite);
190 venkat.puvvada 1.11         _sslContext = _sslContextMgr->getSSLContext();
191                             _sslContextObjectLock = _sslContextMgr->getSSLContextObjectLock();
192                         }
193 s.kodali       1.12 #endif
194 venkat.puvvada 1.11 
195                         _consumerManager = new ConsumerManager(
196                             consumerDir,
197                             consumerConfigDir,
198                             enableConsumerUnload,
199                             consumerIdleTimeout);
200                     
201                         _listenerService = new ListenerService(_consumerManager);
202                     
203                         PEG_METHOD_EXIT();
204                     }
205                     
206 h.sterling     1.1  DynamicListenerRep::~DynamicListenerRep()
207                     {
208                         PEG_METHOD_ENTER(TRC_LISTENER, "DynamicListenerRep::~DynamicListenerRep");
209                     
210 kumpf          1.6      delete _consumerManager;
211 h.sterling     1.1  
212 kumpf          1.6      delete _listenerService;
213 h.sterling     1.1  
214 venkat.puvvada 1.11     delete _sslContextMgr;
215                     
216 h.sterling     1.1      PEG_METHOD_EXIT();
217                     }
218                     
219                     void DynamicListenerRep::start()
220                     {
221                         PEG_METHOD_ENTER(TRC_LISTENER, "DynamicListenerRep::start");
222                     
223                         if (_sslContext)
224                         {
225 venkat.puvvada 1.11         _listenerService->initializeListener(
226                                 _port,
227                                 true,
228                                 _sslContext,
229                                 _sslContextObjectLock);
230 h.sterling     1.1  
231 venkat.puvvada 1.11     }
232                         else
233 h.sterling     1.1      {
234 venkat.puvvada 1.11         _listenerService->initializeListener(_port, false, 0, 0);
235 h.sterling     1.1      }
236                     
237                         _listenerService->runListener();
238                     
239 kumpf          1.10     PEG_METHOD_EXIT();
240 h.sterling     1.1  }
241                     
242                     void DynamicListenerRep::stop(Boolean forceShutdown)
243                     {
244                         PEG_METHOD_ENTER(TRC_LISTENER, "DynamicListenerRep::stop");
245                     
246                         _listenerService->shutdownListener();
247                     
248                         PEG_METHOD_EXIT();
249                     }
250                     
251                     Boolean DynamicListenerRep::isAlive()
252                     {
253                         return _listenerService->isAlive();
254                     }
255                     
256 kumpf          1.10 //TODO:
257 marek          1.7  Boolean DynamicListenerRep::addConsumer(
258                                 const String& consumerName,
259                                 const String& location)
260 h.sterling     1.1  {
261                         return true;
262                         //return _consumerManager->addConsumer(consumerName, location);
263                     }
264                     
265                     //TODO:
266                     Boolean DynamicListenerRep::removeConsumer(const String& consumerName)
267                     {
268                         return true;
269                         //return _consumerManager->unloadConsumer(consumerName);
270                     }
271                     
272 kumpf          1.10 Uint32 DynamicListenerRep::getPortNumber()
273 h.sterling     1.1  {
274                         return _listenerService->getPortNumber();
275                     }
276                     
277                     String DynamicListenerRep::getConsumerDir()
278                     {
279                         return _consumerManager->getConsumerDir();
280                     }
281                     
282                     String DynamicListenerRep::getConsumerConfigDir()
283                     {
284                         return _consumerManager->getConsumerConfigDir();
285                     }
286                     
287                     Boolean DynamicListenerRep::getEnableConsumerUnload()
288                     {
289                         return _consumerManager->getEnableConsumerUnload();
290                     }
291                     
292                     void DynamicListenerRep::setEnableConsumerUnload(Boolean enableConsumerUnload)
293                     {
294 h.sterling     1.1  //do nothing for now
295                     }
296                     
297                     Uint32 DynamicListenerRep::getIdleTimeout()
298                     {
299                         return _consumerManager->getIdleTimeout();
300                     }
301                     
302 gs.keenan      1.3  void DynamicListenerRep::setIdleTimeout(Uint32 idleTimeout)
303 h.sterling     1.1  {
304                     //do nothing for now
305                     }
306                     
307                     
308                     /////////////////////////////////////////////////////////////////////////////
309                     // DynamicListener
310                     /////////////////////////////////////////////////////////////////////////////
311                     
312 kumpf          1.10 DynamicListener::DynamicListener(Uint32 portNumber,
313                                                      const String& consumerDir,
314 h.sterling     1.1                                   const String& consumerConfigDir,
315 kumpf          1.10                                  Boolean enableConsumerUnload,
316                                                      Uint32 consumerIdleTimeout,
317                                                      Uint32 shutdownTimeout)
318                     {
319                         _rep = new DynamicListenerRep(portNumber,
320                                                       consumerDir,
321                                                       consumerConfigDir,
322                                                       0,
323 venkat.puvvada 1.11                                   0,
324 kumpf          1.10                                   enableConsumerUnload,
325                                                       consumerIdleTimeout,
326 h.sterling     1.1                                    shutdownTimeout);
327                     }
328                     
329                     #ifdef PEGASUS_HAS_SSL
330 marek          1.7  DynamicListener::DynamicListener(
331 kumpf          1.10     Uint32 portNumber,
332 marek          1.7      const String& consumerDir,
333                         const String& consumerConfigDir,
334 kumpf          1.10     Boolean useSSL,
335                         const String& keyPath,
336 marek          1.7      const String& certPath,
337 kumpf          1.10     Boolean enableConsumerUnload,
338                         Uint32 consumerIdleTimeout,
339 anusha.kandepu 1.13     Uint32 shutdownTimeout,
340                         const String & sslCipherSuite)     //ONLY IF PEGASUS_HAS_SSL
341 h.sterling     1.1  {
342                     
343 venkat.puvvada 1.11     _rep = new DynamicListenerRep(
344                             portNumber,
345                             consumerDir,
346                             consumerConfigDir,
347                             useSSL,
348                             keyPath,
349                             certPath,
350                             enableConsumerUnload,
351                             consumerIdleTimeout,
352 anusha.kandepu 1.13         shutdownTimeout,
353                             sslCipherSuite);
354 h.sterling     1.1  }
355                     
356 marek          1.7  DynamicListener::DynamicListener(
357 kumpf          1.10     Uint32 portNumber,
358 marek          1.7      const String& consumerDir,
359                         const String& consumerConfigDir,
360 kumpf          1.10     Boolean useSSL,
361 marek          1.7      SSLContext* sslContext,
362 venkat.puvvada 1.11     ReadWriteSem*  sslContextObjectLock,
363 kumpf          1.10     Boolean enableConsumerUnload,
364                         Uint32 consumerIdleTimeout,
365 marek          1.7      Uint32 shutdownTimeout)     //ONLY IF PEGASUS_HAS_SSL
366 h.sterling     1.1  {
367 kumpf          1.10     _rep = new DynamicListenerRep(portNumber,
368                                                       consumerDir,
369                                                       consumerConfigDir,
370                                                       sslContext,
371 venkat.puvvada 1.11                                   sslContextObjectLock,
372 kumpf          1.10                                   enableConsumerUnload,
373                                                       consumerIdleTimeout,
374 h.sterling     1.1                                    shutdownTimeout);
375                     }
376                     #endif
377                     
378                     DynamicListener::~DynamicListener()
379                     {
380 kumpf          1.6      delete static_cast<DynamicListenerRep*>(_rep);
381 h.sterling     1.1  }
382                     
383                     void DynamicListener::start()
384                     {
385                         static_cast<DynamicListenerRep*>(_rep)->start();
386                     }
387                     
388                     void DynamicListener::stop(Boolean forceShutdown)
389                     {
390                         static_cast<DynamicListenerRep*>(_rep)->stop(forceShutdown);
391                     }
392                     
393                     Boolean DynamicListener::isAlive()
394                     {
395                         return static_cast<DynamicListenerRep*>(_rep)->isAlive();
396                     }
397                     
398 marek          1.7  Boolean DynamicListener::addConsumer(
399                         const String& consumerName,
400                         const String& location)
401                     {
402                         return static_cast<DynamicListenerRep*>(_rep)->addConsumer(
403                                                                            consumerName,
404                                                                            location);
405 h.sterling     1.1  }
406                     
407                     Boolean DynamicListener::removeConsumer(const String& consumerName)
408                     {
409 marek          1.7      return static_cast<DynamicListenerRep*>(_rep)->removeConsumer(
410                                                                            consumerName);
411 h.sterling     1.1  }
412                     
413 kumpf          1.10 Uint32 DynamicListener::getPortNumber()
414 h.sterling     1.1  {
415                         return static_cast<DynamicListenerRep*>(_rep)->getPortNumber();
416                     }
417                     
418 kumpf          1.10 String DynamicListener::getConsumerDir()
419 h.sterling     1.1  {
420                         return static_cast<DynamicListenerRep*>(_rep)->getConsumerDir();
421 kumpf          1.10 }
422 h.sterling     1.1  
423 kumpf          1.10 String DynamicListener::getConsumerConfigDir()
424 h.sterling     1.1  {
425                         return static_cast<DynamicListenerRep*>(_rep)->getConsumerConfigDir();
426 kumpf          1.10 }
427 h.sterling     1.1  
428                     void DynamicListener::setEnableConsumerUnload(const Boolean consumerUnload)
429                     {
430 marek          1.7      static_cast<DynamicListenerRep*>(_rep)->setEnableConsumerUnload(
431                                                                     consumerUnload);
432 h.sterling     1.1  }
433                     
434                     Boolean DynamicListener::getEnableConsumerUnload()
435                     {
436                         return static_cast<DynamicListenerRep*>(_rep)->getEnableConsumerUnload();
437                     }
438                     
439 kumpf          1.10 Uint32 DynamicListener::getIdleTimeout()
440 h.sterling     1.1  {
441                         return static_cast<DynamicListenerRep*>(_rep)->getIdleTimeout();
442                     }
443                     
444 gs.keenan      1.3  void DynamicListener::setIdleTimeout(Uint32 idleTimeout)
445 h.sterling     1.1  {
446                         static_cast<DynamicListenerRep*>(_rep)->setIdleTimeout(idleTimeout);
447                     }
448                     
449                     
450                     PEGASUS_NAMESPACE_END
451                     

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2