Added user.register handler and unload capability.

git-svn-id: http://yate.null.ro/svn/yate/trunk@1698 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
paulc 2008-01-28 17:48:14 +00:00
parent a889183a6f
commit e7f99175bc
2 changed files with 49 additions and 1 deletions

View File

@ -22,3 +22,6 @@
; call.execute: int: Priority of execute message handler (on source node)
;call.execute=50
; user.register: int: Priority of registration message handler (on registrar)
;user.register=50

View File

@ -30,12 +30,17 @@ namespace { // anonymous
class ClusterModule : public Module
{
public:
enum {
Register = Private,
};
ClusterModule();
~ClusterModule();
bool unload();
virtual void initialize();
virtual bool received(Message& msg, int id);
virtual bool msgRoute(Message& msg);
virtual bool msgExecute(Message& msg);
virtual bool msgRegister(Message& msg);
private:
String m_prefix;
String m_callto;
@ -45,6 +50,22 @@ private:
INIT_PLUGIN(ClusterModule);
UNLOAD_PLUGIN(unloadNow)
{
if (unloadNow && !__plugin.unload())
return false;
return true;
}
bool ClusterModule::unload()
{
if (!lock(500000))
return false;
uninstallRelays();
unlock();
return true;
}
bool ClusterModule::msgRoute(Message& msg)
{
@ -104,9 +125,28 @@ bool ClusterModule::msgExecute(Message& msg)
return false;
}
bool ClusterModule::msgRegister(Message& msg)
{
String data = msg.getValue("data");
if (data.null())
return false;
Lock lock(this);
if (data.startsWith(m_prefix))
return false;
msg.setParam("data",m_prefix + Engine::nodeName() + "/" + data);
return false;
}
bool ClusterModule::received(Message& msg, int id)
{
return (Execute == id) ? msgExecute(msg) : Module::received(msg,id);
switch (id) {
case Execute:
return msgExecute(msg);
case Register:
return msgRegister(msg);
default:
return Module::received(msg,id);
}
}
ClusterModule::ClusterModule()
@ -123,6 +163,10 @@ ClusterModule::~ClusterModule()
void ClusterModule::initialize()
{
if (Engine::nodeName().null()) {
Debug(&__plugin,DebugNote,"Node name is empty, clustering disabled.");
return;
}
Output("Initializing module Clustering");
Configuration cfg(Engine::configFile("clustering"));
lock();
@ -136,6 +180,7 @@ void ClusterModule::initialize()
setup();
installRelay(Route,cfg.getIntValue("priorities","call.route",50));
installRelay(Execute,cfg.getIntValue("priorities","call.execute",50));
installRelay(Register,"user.register",cfg.getIntValue("priorities","user.register",50));
m_init = true;
}
}