version 1.27, 2002/05/29 19:29:38
|
version 1.40, 2005/03/10 00:38:17
|
|
|
//%////-*-c++-*-//////////////////////////////////////////////////////////////// |
//%2005//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
|
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; |
|
// IBM Corp.; EMC Corporation, The Open Group. |
|
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
|
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// | // |
// Author: Mike Day (mdday@us.ibm.com) <<< Wed Mar 13 20:49:40 2002 mdd >>> | // Author: Mike Day (mdday@us.ibm.com) <<< Wed Mar 13 20:49:40 2002 mdd >>> |
// | // |
// Modified By: |
// Modified By: Amit K Arora, IBM (amita@in.ibm.com) |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <Pegasus/Common/Constants.h> | #include <Pegasus/Common/Constants.h> |
#include <Pegasus/Common/Message.h> | #include <Pegasus/Common/Message.h> |
#include <Pegasus/Common/Exception.h> |
#include <Pegasus/Common/InternalException.h> |
#include <Pegasus/Common/IPC.h> | #include <Pegasus/Common/IPC.h> |
#include <Pegasus/Common/Thread.h> | #include <Pegasus/Common/Thread.h> |
#include <Pegasus/Common/AsyncOpNode.h> | #include <Pegasus/Common/AsyncOpNode.h> |
|
|
#include <Pegasus/Common/CimomMessage.h> | #include <Pegasus/Common/CimomMessage.h> |
#include <Pegasus/Common/MessageQueueService.h> | #include <Pegasus/Common/MessageQueueService.h> |
#include <Pegasus/Common/peg_authorization.h> | #include <Pegasus/Common/peg_authorization.h> |
|
#include <Pegasus/Common/Linkage.h> |
|
#include <Pegasus/Common/AutoPtr.h> |
| |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
|
|
| |
| |
Mutex _thread_safety; | Mutex _thread_safety; |
ModuleController *_controller; |
AutoPtr<ModuleController> _controller;//PEP101 |
String _name; | String _name; |
AtomicInt _reference_count; | AtomicInt _reference_count; |
AtomicInt _shutting_down; | AtomicInt _shutting_down; |
|
|
| |
private: | private: |
| |
module_rep *_rep; |
AutoPtr<module_rep> _rep;//PEP101 |
| |
pegasus_module(void) | pegasus_module(void) |
{ | { |
|
|
CLIENT_SEND_ASYNC | | CLIENT_SEND_ASYNC | |
CLIENT_SEND_ASYNC_MODULE | | CLIENT_SEND_ASYNC_MODULE | |
CLIENT_BLOCKING_THREAD_EXEC | | CLIENT_BLOCKING_THREAD_EXEC | |
CLIENT_ASYNC_THREAD_EXEC) |
CLIENT_ASYNC_THREAD_EXEC), |
|
reference_count(1) |
{ | { |
} | } |
| |
|
|
{ | { |
} | } |
| |
|
client_handle & operator=(const client_handle & handle) |
|
{ |
|
if(this == &handle) |
|
return *this; |
|
reference_count++; |
|
return *this; |
|
} |
|
|
|
|
virtual Boolean authorized(Uint32, Uint32); | virtual Boolean authorized(Uint32, Uint32); |
virtual Boolean authorized(Uint32 operation); | virtual Boolean authorized(Uint32 operation); |
virtual Boolean authorized(void); | virtual Boolean authorized(void); |
PEGASUS_STD(bitset<32>) allowed_operations; | PEGASUS_STD(bitset<32>) allowed_operations; |
|
AtomicInt reference_count; |
|
|
}; | }; |
| |
class callback_handle | class callback_handle |
|
|
~callback_handle() | ~callback_handle() |
{ | { |
if( _module->get_name() == String(PEGASUS_MODULENAME_TEMP) ) | if( _module->get_name() == String(PEGASUS_MODULENAME_TEMP) ) |
delete _module; |
// delete _module; |
|
_module.reset(); |
} | } |
| |
pegasus_module * _module; |
AutoPtr<pegasus_module> _module;//PEP101 |
void *_parm; | void *_parm; |
}; | }; |
| |
|
|
| |
| |
ModuleController(const char *name); | ModuleController(const char *name); |
ModuleController(const char *name, |
/* ModuleController(const char *name, */ |
Sint16 min_threads, |
/* Sint16 min_threads, */ |
Sint16 max_threads, |
/* Sint16 max_threads, */ |
struct timeval & create_thread, |
/* struct timeval & create_thread, */ |
struct timeval & destroy_thread, |
/* struct timeval & destroy_thread); */ |
struct timeval & deadlock); |
|
| |
| |
~ModuleController(void); | ~ModuleController(void); |
|
|
void (*shutdown_notify)(Uint32, void *), | void (*shutdown_notify)(Uint32, void *), |
pegasus_module **instance = NULL) | pegasus_module **instance = NULL) |
| |
throw(AlreadyExists, IncompatibleTypes); |
throw(AlreadyExistsException, IncompatibleTypesException); |
| |
Boolean deregister_module(const String & module_name) | Boolean deregister_module(const String & module_name) |
throw(Permission); | throw(Permission); |
|
|
| |
static ModuleController & get_client_handle(const pegasus_identity & id, | static ModuleController & get_client_handle(const pegasus_identity & id, |
client_handle **handle) | client_handle **handle) |
throw(IncompatibleTypes); |
throw(IncompatibleTypesException); |
| |
static ModuleController & get_client_handle(char *controller, |
static ModuleController & get_client_handle(const char *controller, |
const pegasus_identity & id, | const pegasus_identity & id, |
client_handle **handle) | client_handle **handle) |
throw(IncompatibleTypes); |
throw(IncompatibleTypesException); |
| |
| |
void return_client_handle(client_handle *handle); | void return_client_handle(client_handle *handle); |
|
|
virtual void _handle_async_request(AsyncRequest *rq); | virtual void _handle_async_request(AsyncRequest *rq); |
virtual void _handle_async_callback(AsyncOpNode *op); | virtual void _handle_async_callback(AsyncOpNode *op); |
| |
|
private: |
|
|
|
|
|
class _module_lock |
|
{ |
|
public: |
|
_module_lock(DQueue<pegasus_module> * list) |
|
:_list(list) |
|
{ |
|
_list->lock(); |
| |
|
} |
|
~_module_lock(void) |
|
{ |
|
_list->unlock(); |
|
} |
| |
| |
private: | private: |
|
_module_lock(); |
|
DQueue<pegasus_module> * _list; |
|
}; |
|
|
|
|
|
|
static void _async_handleEnqueue(AsyncOpNode *h, MessageQueue *q, void *parm); | static void _async_handleEnqueue(AsyncOpNode *h, MessageQueue *q, void *parm); |
DQueue<pegasus_module> _modules; | DQueue<pegasus_module> _modules; |
ThreadPool _thread_pool; |
|
pegasus_module _internal_module; | pegasus_module _internal_module; |
AsyncReply *_send_wait(Uint32, AsyncRequest *); | AsyncReply *_send_wait(Uint32, AsyncRequest *); |
AsyncReply *_send_wait(Uint32, const String &, AsyncRequest *); | AsyncReply *_send_wait(Uint32, const String &, AsyncRequest *); |
|
|
| |
| |
| |
|
|
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
| |
| |