Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.mobicents.ss7.service.SS7ExtensionService Maven / Gradle / Ivy
/*
* TeleStax, Open Source Cloud Communications Copyright 2012.
* and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.mobicents.ss7.service;
import java.util.LinkedList;
import java.util.List;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javolution.util.FastList;
import javolution.util.FastMap;
import org.jboss.as.controller.services.path.PathManager;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.Property;
import org.jboss.logging.Logger;
import org.jboss.msc.service.Service;
import org.jboss.msc.service.ServiceName;
import org.jboss.msc.service.StartContext;
import org.jboss.msc.service.StartException;
import org.jboss.msc.service.StopContext;
import org.jboss.msc.value.InjectedValue;
import org.mobicents.protocols.api.Management;
import org.mobicents.protocols.sctp.netty.NettySctpManagementImpl;
import org.mobicents.protocols.ss7.cap.CAPStackImpl;
import org.mobicents.protocols.ss7.cap.api.CAPStack;
import org.mobicents.protocols.ss7.isup.ISUPStack;
import org.mobicents.protocols.ss7.isup.impl.CircuitManagerImpl;
import org.mobicents.protocols.ss7.isup.impl.ISUPStackImpl;
import org.mobicents.protocols.ss7.m3ua.impl.M3UAManagementImpl;
import org.mobicents.protocols.ss7.m3ua.impl.oam.M3UAShellExecutor;
import org.mobicents.protocols.ss7.m3ua.impl.oam.SCTPShellExecutor;
import org.mobicents.protocols.ss7.map.MAPStackImpl;
import org.mobicents.protocols.ss7.map.api.MAPStack;
import org.mobicents.protocols.ss7.mtp.Mtp3UserPart;
import org.mobicents.protocols.ss7.mtp.RoutingLabelFormat;
import org.mobicents.protocols.ss7.oam.common.alarm.AlarmProvider;
import org.mobicents.protocols.ss7.oam.common.jmxss7.Ss7Management;
import org.mobicents.protocols.ss7.oam.common.m3ua.M3uaManagementJmx;
import org.mobicents.protocols.ss7.oam.common.sccp.SccpManagementJmx;
import org.mobicents.protocols.ss7.oam.common.sctp.SctpManagementJmx;
import org.mobicents.protocols.ss7.oam.common.statistics.CounterProviderManagement;
import org.mobicents.protocols.ss7.oam.common.tcap.TcapManagementJmx;
import org.mobicents.protocols.ss7.sccp.impl.SccpStackImpl;
import org.mobicents.protocols.ss7.sccp.impl.oam.SccpExecutor;
import org.mobicents.protocols.ss7.scheduler.DefaultClock;
import org.mobicents.protocols.ss7.scheduler.Scheduler;
import org.mobicents.protocols.ss7.tcap.TCAPStackImpl;
import org.mobicents.protocols.ss7.tcap.api.TCAPStack;
import org.mobicents.protocols.ss7.tcap.oam.TCAPExecutor;
import org.mobicents.ss7.SS7Service;
import org.mobicents.ss7.hardware.dialogic.DialogicMtp3UserPart;
import org.mobicents.ss7.management.console.ShellExecutor;
import org.mobicents.ss7.management.console.ShellServer;
import org.mobicents.ss7.management.console.ShellServerWildFly;
/**
*
* @author sergey povarnin
* @author sergey vetyutnev
*
*/
public class SS7ExtensionService implements SS7ServiceInterface,Service {
// //
public static final SS7ExtensionService INSTANCE = new SS7ExtensionService();
private final Logger log = Logger.getLogger(SS7ExtensionService.class);
public static ServiceName getServiceName() {
return ServiceName.of("restcomm", "ss7");
}
private final InjectedValue mbeanServer = new InjectedValue();
public InjectedValue getMbeanServer() {
return mbeanServer;
}
private final InjectedValue pathManagerInjector = new InjectedValue();
public InjectedValue getPathManagerInjector() {
return pathManagerInjector;
}
private final LinkedList registeredMBeans = new LinkedList();
private static final String DATA_DIR = "jboss.server.data.dir";
private ModelNode fullModel;
private FastMap beanSctpManagements = new FastMap();
private SCTPShellExecutor beanSctpShellExecutor;
private FastMap beanSctpManagementJmxs = new FastMap();
private FastMap routingLabelFormats = new FastMap();
private FastMap beanMtp3UserParts = new FastMap();
private FastMap beanM3uaManagementImpls = new FastMap();
private FastMap beanDialogicImpls = new FastMap();
private M3UAShellExecutor beanM3uaShellExecutor;
private FastMap beanM3uaManagementJmxs = new FastMap();
private Scheduler schedulerMBean = null;
private FastMap beanISUPStacks = new FastMap();
private FastMap beanSccpStacks = new FastMap();
private SccpExecutor beanSccpExecutor;
private FastMap beanSccpManagementJmxs = new FastMap();
private FastMap beanTcapStacks = new FastMap();
private TCAPExecutor beanTcapExecutor;
private FastMap beanTcapManagementJmxs = new FastMap();
private FastMap beanMapStacks = new FastMap();
private FastMap beanCapStacks = new FastMap();
private FastMap beanSS7Services = new FastMap();
private ShellServer shellExecutorMBean = null;
private Ss7Management ss7ManagementMBean = null;
private AlarmProvider restcommAlarmManagementMBean = null;
private CounterProviderManagement restcommStatisticManagementMBean = null;
public void setModel(ModelNode model) {
this.fullModel = model;
}
private ModelNode peek(ModelNode node, String... args) {
for (String arg : args) {
if (!node.hasDefined(arg)) {
return null;
}
node = node.get(arg);
}
return node;
}
private String getPropertyString(String mbeanName, String propertyName, String defaultValue) {
String result = defaultValue;
ModelNode propertyNode = peek(fullModel, "mbean", mbeanName, "property", propertyName);
if (propertyNode != null && propertyNode.isDefined()) {
// log.debug("propertyNode: "+propertyNode);
// todo: test TYPE?
result = propertyNode.get("value").asString();
}
return (result == null) ? defaultValue : result;
}
private int getPropertyInt(String mbeanName, String propertyName, int defaultValue) {
int result = defaultValue;
ModelNode propertyNode = peek(fullModel, "mbean", mbeanName, "property", propertyName);
if (propertyNode != null && propertyNode.isDefined()) {
// log.debug("propertyNode: "+propertyNode);
// todo: test TYPE?
result = propertyNode.get("value").asInt();
}
return result;
}
private boolean getPropertyBoolean(String mbeanName, String propertyName, boolean defaultValue) {
boolean result = defaultValue;
ModelNode propertyNode = peek(fullModel, "mbean", mbeanName, "property", propertyName);
if (propertyNode != null && propertyNode.isDefined()) {
result = propertyNode.get("value").asBoolean();
}
return result;
}
@Override
public SS7ExtensionService getValue() throws IllegalStateException, IllegalArgumentException {
return this;
}
@Override
public void start(StartContext context) throws StartException {
log.info("Starting SS7ExtensionService");
String dataDir = pathManagerInjector.getValue().getPathEntry(DATA_DIR).resolvePath();
log.info("dataDir: " + dataDir);
createMtp3UserParts(dataDir);
// DefaultClock
DefaultClock ss7Clock = null;
try {
ss7Clock = new DefaultClock();
} catch (Exception e) {
throw new StartException("SS7Clock MBean creating is failed: " + e.getMessage(), e);
}
// Scheduler
schedulerMBean = null;
try {
schedulerMBean = new Scheduler();
schedulerMBean.setClock(ss7Clock);
} catch (Exception e) {
throw new StartException("SS7Scheduler MBean creating is failed: " + e.getMessage(), e);
}
createPayloadParts(dataDir);
if(shellExecutorExists()) {
shellExecutorMBean = null;
try {
FastList shellExecutors = new FastList();
shellExecutors.add(beanSccpExecutor);
shellExecutors.add(beanM3uaShellExecutor);
shellExecutors.add(beanSctpShellExecutor);
shellExecutors.add(beanTcapExecutor);
String address = getPropertyString("ShellExecutor", "address", "127.0.0.1");
int port = getPropertyInt("ShellExecutor", "port", 3435);
String securityDomain = getPropertyString("ShellExecutor", "securityDomain", "jmx-console");
shellExecutorMBean = new ShellServerWildFly(schedulerMBean, shellExecutors);
shellExecutorMBean.setAddress(address);
shellExecutorMBean.setPort(port);
shellExecutorMBean.setSecurityDomain(securityDomain);
} catch (Exception e) {
throw new StartException("ShellExecutor MBean creating is failed: " + e.getMessage(), e);
}
}
// Ss7Management
try {
ss7ManagementMBean = new Ss7Management();
ss7ManagementMBean.setAgentId(getPropertyString("Ss7Management", "agentId", "jboss"));
registerMBean(ss7ManagementMBean, "org.mobicents.ss7:service=Ss7Management");
} catch (Exception e) {
throw new StartException("Ss7Management MBean creating is failed: " + e.getMessage(), e);
}
// AlarmProvider
try {
restcommAlarmManagementMBean = new AlarmProvider(ss7ManagementMBean, ss7ManagementMBean);
} catch (Exception e) {
throw new StartException("AlarmProvider MBean creating is failed: " + e.getMessage(), e);
}
// CounterProviderManagement
try {
restcommStatisticManagementMBean = new CounterProviderManagement(ss7ManagementMBean);
restcommStatisticManagementMBean.setPersistDir(dataDir);
} catch (Exception e) {
throw new StartException("CounterProviderManagement MBean creating is failed: " + e.getMessage(), e);
}
// SctpManagementJmx
for (FastMap.Entry n = beanSctpManagements.head(), end = beanSctpManagements.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
Management sctpManagement = n.getValue();
try {
SctpManagementJmx restcommSctpManagementMBean = new SctpManagementJmx(ss7ManagementMBean, sctpManagement);
this.beanSctpManagementJmxs.put(beanName, restcommSctpManagementMBean);
} catch (Exception e) {
throw new StartException("SctpManagementJmx MBean creating is failed: beanName=" + beanName + ", "
+ e.getMessage(), e);
}
}
// M3uaManagementJmx
for (FastMap.Entry n = beanM3uaManagementImpls.head(), end = beanM3uaManagementImpls.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
M3UAManagementImpl m3uaManagement = n.getValue();
try {
M3uaManagementJmx restcommM3uaManagementMBean = new M3uaManagementJmx(ss7ManagementMBean, m3uaManagement);
this.beanM3uaManagementJmxs.put(beanName, restcommM3uaManagementMBean);
} catch (Exception e) {
throw new StartException("M3uaManagementJmx MBean creating is failed: beanName=" + beanName + ", "
+ e.getMessage(), e);
}
}
// SccpManagementJmx
for (FastMap.Entry n = beanSccpStacks.head(), end = beanSccpStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
SccpStackImpl sccpStack = n.getValue();
try {
SccpManagementJmx restcommSccpManagementMBean = new SccpManagementJmx(ss7ManagementMBean, sccpStack);
this.beanSccpManagementJmxs.put(beanName, restcommSccpManagementMBean);
} catch (Exception e) {
throw new StartException("SccpManagementJmx MBean creating is failed: beanName=" + beanName + ", "
+ e.getMessage(), e);
}
}
// TcapManagementJmx
for (FastMap.Entry n = beanTcapStacks.head(), end = beanTcapStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
TCAPStackImpl tcapStack = n.getValue();
try {
TcapManagementJmx restcommTcapManagementMBean = new TcapManagementJmx(ss7ManagementMBean, tcapStack);
this.beanTcapManagementJmxs.put(beanName, restcommTcapManagementMBean);
} catch (Exception e) {
throw new StartException("TcapManagementJmx MBean creating is failed: beanName=" + beanName + ", "
+ e.getMessage(), e);
}
}
// SCTPManagement - start
for (FastMap.Entry n = beanSctpManagements.head(), end = beanSctpManagements.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
Management sctpManagement = n.getValue();
try {
sctpManagement.start();
} catch (Exception e) {
throw new StartException("SCTPManagement_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// mtp3UserParts - start
for (FastMap.Entry n = beanMtp3UserParts.head(), end = beanMtp3UserParts.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
Mtp3UserPart mtp3UserPart = n.getValue();
try {
mtp3UserPart.start();
} catch (Exception e) {
throw new StartException("Mtp3UserPart_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// scheduler - start
try {
schedulerMBean.start();
} catch (Exception e) {
throw new StartException("Scheduler MBean starting is failed: " + e.getMessage(), e);
}
// ISUP - start
for (FastMap.Entry n = beanISUPStacks.head(), end = beanISUPStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
ISUPStack isupStack = n.getValue();
try {
isupStack.start();
} catch (Exception e) {
throw new StartException("ISUPStack_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// SCCP - start
for (FastMap.Entry n = beanSccpStacks.head(), end = beanSccpStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
SccpStackImpl sccpStack = n.getValue();
try {
sccpStack.start();
} catch (Exception e) {
throw new StartException("SCCPStack_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// TCAP - start
for (FastMap.Entry n = beanTcapStacks.head(), end = beanTcapStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
TCAPStackImpl tcapStack = n.getValue();
try {
tcapStack.start();
} catch (Exception e) {
throw new StartException("TCAPStack_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// MAP - start
for (FastMap.Entry n = beanMapStacks.head(), end = beanMapStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
MAPStackImpl mapStack = n.getValue();
try {
mapStack.start();
} catch (Exception e) {
throw new StartException("MAPStack_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// CAP - start
for (FastMap.Entry n = beanCapStacks.head(), end = beanCapStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
CAPStackImpl capStack = n.getValue();
try {
capStack.start();
} catch (Exception e) {
throw new StartException("CAPStack_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// Starting of general beans
try {
if(shellExecutorMBean != null) {
shellExecutorMBean.start();
}
ss7ManagementMBean.start();
restcommAlarmManagementMBean.start();
restcommStatisticManagementMBean.start();
} catch (Exception e) {
throw new StartException("Genaral MBean starting is failed: " + e.getMessage(), e);
}
// Services - start
for (FastMap.Entry n = beanSS7Services.head(), end = beanSS7Services.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
SS7Service ss7Service = n.getValue();
try {
ss7Service.create();
ss7Service.start();
} catch (Exception e) {
throw new StartException("SS7Service_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// SctpManagementMBean - start
for (FastMap.Entry n = beanSctpManagementJmxs.head(), end = beanSctpManagementJmxs.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
SctpManagementJmx sctpManagementJmx = n.getValue();
try {
sctpManagementJmx.start();
} catch (Exception e) {
throw new StartException("SCTPManagementJmx_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// M3uaManagementMBean - start
for (FastMap.Entry n = beanM3uaManagementJmxs.head(), end = beanM3uaManagementJmxs.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
M3uaManagementJmx m3uaManagementJmx = n.getValue();
try {
m3uaManagementJmx.start();
} catch (Exception e) {
throw new StartException("M3uaManagementJmx_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// SccpManagementMBean - start
for (FastMap.Entry n = beanSccpManagementJmxs.head(), end = beanSccpManagementJmxs.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
SccpManagementJmx sccpManagementJmx = n.getValue();
try {
sccpManagementJmx.start();
} catch (Exception e) {
throw new StartException("SccpManagementJmx_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
// TcapManagementMBean - start
for (FastMap.Entry n = beanTcapManagementJmxs.head(), end = beanTcapManagementJmxs.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
TcapManagementJmx tcapManagementJmx = n.getValue();
try {
tcapManagementJmx.start();
} catch (Exception e) {
throw new StartException("TcapManagementJmx_" + beanName + " MBean starting is failed: " + e.getMessage(), e);
}
}
}
private boolean shellExecutorExists() {
ModelNode shellExecutorNode = peek(fullModel, "mbean", "ShellExecutor");
return shellExecutorNode != null;
}
@Override
public void stop(StopContext context) {
log.info("Stopping SS7ExtensionService");
// TcapManagementMBean - stop
for (FastMap.Entry n = beanTcapManagementJmxs.head(), end = beanTcapManagementJmxs.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
TcapManagementJmx tcapManagementJmx = n.getValue();
try {
tcapManagementJmx.stop();
} catch (Exception e) {
log.warn("TcapManagementJmx_" + beanName + " MBean stopping is failed: " + e);
}
}
// SccpManagementMBean - stop
for (FastMap.Entry n = beanSccpManagementJmxs.head(), end = beanSccpManagementJmxs.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
SccpManagementJmx sccpManagementJmx = n.getValue();
try {
sccpManagementJmx.stop();
} catch (Exception e) {
log.warn("SccpManagementJmx_" + beanName + " MBean stopping is failed: " + e);
}
}
// M3uaManagementMBean - stop
for (FastMap.Entry n = beanM3uaManagementJmxs.head(), end = beanM3uaManagementJmxs.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
M3uaManagementJmx m3uaManagementJmx = n.getValue();
try {
m3uaManagementJmx.stop();
} catch (Exception e) {
log.warn("M3uaManagementJmx_" + beanName + " MBean stopping is failed: " + e);
}
}
// SctpManagementMBean - stop
for (FastMap.Entry n = beanSctpManagementJmxs.head(), end = beanSctpManagementJmxs.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
SctpManagementJmx sctpManagementJmx = n.getValue();
try {
sctpManagementJmx.stop();
} catch (Exception e) {
log.warn("SCTPManagementJmx_" + beanName + " MBean stopping is failed: " + e);
}
}
// Services - stop
for (FastMap.Entry n = beanSS7Services.head(), end = beanSS7Services.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
SS7Service ss7Service = n.getValue();
try {
ss7Service.stop();
} catch (Exception e) {
log.warn("SS7Service_" + beanName + " MBean stopping is failed: " + e);
}
}
// stopping of general beans
try {
if (restcommStatisticManagementMBean != null)
restcommStatisticManagementMBean.stop();
if (restcommAlarmManagementMBean != null)
restcommAlarmManagementMBean.stop();
if (ss7ManagementMBean != null)
ss7ManagementMBean.stop();
if (shellExecutorMBean != null)
shellExecutorMBean.stop();
} catch (Exception e) {
log.warn("Genaral MBean stopping is failed: " + e);
}
// CAP - stop
for (FastMap.Entry n = beanCapStacks.head(), end = beanCapStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
CAPStackImpl capStack = n.getValue();
try {
capStack.stop();
} catch (Exception e) {
log.warn("CAPStack_" + beanName + " MBean stopping is failed: " + e);
}
}
// MAP - stop
for (FastMap.Entry n = beanMapStacks.head(), end = beanMapStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
MAPStackImpl mapStack = n.getValue();
try {
mapStack.stop();
} catch (Exception e) {
log.warn("MAPStack_" + beanName + " MBean stopping is failed: " + e);
}
}
// TCAP - stop
for (FastMap.Entry n = beanTcapStacks.head(), end = beanTcapStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
TCAPStackImpl tcapStack = n.getValue();
try {
tcapStack.stop();
} catch (Exception e) {
log.warn("TCAPStack_" + beanName + " MBean stopping is failed: " + e);
}
}
// SCCP - stop
for (FastMap.Entry n = beanSccpStacks.head(), end = beanSccpStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
SccpStackImpl sccpStack = n.getValue();
try {
sccpStack.stop();
} catch (Exception e) {
log.warn("SCCPStack_" + beanName + " MBean stopping is failed: " + e);
}
}
// ISUP - stop
for (FastMap.Entry n = beanISUPStacks.head(), end = beanISUPStacks.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
ISUPStack isupStack = n.getValue();
try {
isupStack.stop();
} catch (Exception e) {
log.warn("ISUPStack_" + beanName + " MBean stopping is failed: " + e);
}
}
// scheduler - stop
try {
if (schedulerMBean != null)
schedulerMBean.stop();
} catch (Exception e) {
log.warn("Scheduler MBean stopping is failed: " + e);
}
// mtp3UserParts - stop
for (FastMap.Entry n = beanMtp3UserParts.head(), end = beanMtp3UserParts.tail(); (n = n.getNext()) != end;) {
String beanName = n.getKey();
Mtp3UserPart mtp3UserPart = n.getValue();
try {
mtp3UserPart.stop();
} catch (Exception e) {
log.warn("Mtp3UserPart_" + beanName + " MBean stopping is failed: " + e);
}
}
// SCTPManagement - stop
for (FastMap.Entry n = beanSctpManagements.head(), end = beanSctpManagements.tail(); (n = n
.getNext()) != end;) {
String beanName = n.getKey();
Management sctpManagement = n.getValue();
try {
sctpManagement.stop();
} catch (Exception e) {
log.warn("SCTPManagement_" + beanName + " MBean stopping is failed: " + e);
}
}
while (!registeredMBeans.isEmpty()) {
unregisterMBean(registeredMBeans.pop());
}
}
private void registerMBean(Object mBean, String name) throws StartException {
if (mBean == null) {
return;
}
try {
getMbeanServer().getValue().registerMBean(mBean, new ObjectName(name));
} catch (Throwable e) {
throw new StartException(e);
}
registeredMBeans.push(name);
}
private void unregisterMBean(String name) {
try {
getMbeanServer().getValue().unregisterMBean(new ObjectName(name));
} catch (Throwable e) {
log.error("failed to unregister mbean", e);
}
}
private void createMtp3UserParts(String dataDir) throws StartException {
// SCTPManagement
ModelNode mbeansNode = peek(fullModel, "mbean");
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("SCTPManagement")) {
createSctpStack(prop.getValue(), beanName, dataDir);
}
}
}
// SCTPShellExecutor
if (beanSctpManagements.size() > 0) {
try {
beanSctpShellExecutor = new SCTPShellExecutor();
beanSctpShellExecutor.setSctpManagements(beanSctpManagements);
} catch (Exception e) {
throw new StartException("SCTPShellExecutor MBean creating is failed: " + e.getMessage(), e);
}
} else {
beanSctpShellExecutor = null;
}
// RoutingLabelFormat
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("RoutingLabelFormat")) {
createRoutingLabelFormat(prop.getValue(), beanName);
}
}
}
// M3UAManagement
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("M3UAManagement")) {
createM3uaStack(prop.getValue(), beanName, dataDir);
}
}
}
// M3UAShellExecutor
if (beanM3uaManagementImpls.size() > 0) {
beanM3uaShellExecutor = new M3UAShellExecutor();
try {
beanM3uaShellExecutor.setM3uaManagements(beanM3uaManagementImpls);
} catch (Exception e) {
throw new StartException("M3UAShellExecutor MBean creating is failed: " + e.getMessage(), e);
}
} else {
beanM3uaShellExecutor = null;
}
// Dialogic
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("DialogicMtp3UserPart")) {
createDialogicStack(prop.getValue(), beanName, dataDir);
}
}
}
}
private void createPayloadParts(String dataDir) throws StartException {
// ISUPStack
ModelNode mbeansNode = peek(fullModel, "mbean");
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("IsupStack")) {
createIsupStack(prop.getValue(), beanName, dataDir);
}
}
}
// ISUPService
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("ISUPSS7Service")) {
createIsupService(prop.getValue(), beanName, dataDir);
}
}
}
// SCCPStack
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("SccpStack")) {
createSccpStack(prop.getValue(), beanName, dataDir);
}
}
}
// SCCPShellExecutor
if (beanSccpStacks.size() > 0) {
beanSccpExecutor = new SccpExecutor();
try {
beanSccpExecutor.setSccpStacks(beanSccpStacks);
} catch (Exception e) {
throw new StartException("SccpExecutor MBean creating is failed: " + e.getMessage(), e);
}
} else {
beanSccpExecutor = null;
}
// TCAPStack
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("TcapStack")) {
createTcapStack(prop.getValue(), beanName, dataDir);
}
}
}
// TCAPShellExecutor
if (beanTcapStacks.size() > 0) {
beanTcapExecutor = new TCAPExecutor();
try {
beanTcapExecutor.setTcapStacks(beanTcapStacks);
} catch (Exception e) {
throw new StartException("TcapExecutor MBean creating is failed: " + e.getMessage(), e);
}
} else {
beanTcapExecutor = null;
}
// TCAPService
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("TCAPSS7Service")) {
createTcapService(prop.getValue(), beanName, dataDir);
}
}
}
// MAPStack
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("MapStack")) {
createMapStack(prop.getValue(), beanName, dataDir);
}
}
}
// MAPService
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("MAPSS7Service")) {
createMapService(prop.getValue(), beanName, dataDir);
}
}
}
// CAPStack
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("CapStack")) {
createCapStack(prop.getValue(), beanName, dataDir);
}
}
}
// CAPService
for (ModelNode node : mbeansNode.asList()) {
for (Property prop : node.asPropertyList()) {
String type = prop.getValue().get("type").asString();
String beanName = prop.getValue().get("name").asString();
if (type.equals("CAPSS7Service")) {
createCapService(prop.getValue(), beanName, dataDir);
}
}
}
}
private void createSctpStack(ModelNode sctpNode, String beanName, String dataDir) throws StartException {
// SCTPManagement
NettySctpManagementImpl sctpManagement = null;
try {
sctpManagement = new NettySctpManagementImpl(beanName);
sctpManagement.setPersistDir(dataDir);
ModelNode prop = sctpNode.get("property");
if (prop != null && prop.isDefined()) {
List properties = prop.asPropertyList();
for (Property property : properties) {
String pName = property.getName();
if (pName.equals("optionSctpDisableFragments")) {
boolean valb = property.getValue().asBoolean();
sctpManagement.setOptionSctpDisableFragments(valb);
} else if (pName.equals("optionSctpFragmentInterleave")) {
int vali = property.getValue().asInt();
sctpManagement.setOptionSctpFragmentInterleave(vali);
} else if (pName.equals("optionSctpNodelay")) {
boolean valb = property.getValue().asBoolean();
sctpManagement.setOptionSctpNodelay(valb);
} else if (pName.equals("optionSoSndbuf")) {
int vali = property.getValue().asInt();
sctpManagement.setOptionSoSndbuf(vali);
} else if (pName.equals("optionSoRcvbuf")) {
int vali = property.getValue().asInt();
sctpManagement.setOptionSoRcvbuf(vali);
} else if (pName.equals("optionSoLinger")) {
int vali = property.getValue().asInt();
sctpManagement.setOptionSoLinger(vali);
} else if (pName.equals("optionSctpInitMaxstreams_MaxOutStreams")) {
int vali = property.getValue().asInt();
sctpManagement.setOptionSctpInitMaxstreams_MaxOutStreams(vali);
} else if (pName.equals("optionSctpInitMaxstreams_MaxInStreams")) {
int vali = property.getValue().asInt();
sctpManagement.setOptionSctpInitMaxstreams_MaxInStreams(vali);
}
}
}
this.beanSctpManagements.put(beanName, sctpManagement);
} catch (Exception e) {
throw new StartException("SCTPManagement MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createRoutingLabelFormat(ModelNode routingLabelFormatNode, String beanName) throws StartException {
// RoutingLabelFormat
RoutingLabelFormat routingLabelFormat = null;
try {
String format = getPropertyString(beanName, "format", "ITU");
routingLabelFormat = RoutingLabelFormat.getInstance(format);
} catch (Exception e) {
throw new StartException("RoutingLabelFormat creating is failed: " + e.getMessage(), e);
}
this.routingLabelFormats.put(beanName, routingLabelFormat);
}
private void createM3uaStack(ModelNode m3uaNode, String beanName, String dataDir) throws StartException {
// M3UAManagement
String m3uaManagementPropertyName = getPropertyString(beanName, "productName", "Restcomm-jSS7");
String transportManagementName = getPropertyString(beanName, "transportManagement", null);
String routingLabelFormatName = getPropertyString(beanName, "routingLabelFormat", null);
if (transportManagementName == null) {
throw new StartException("M3UAManagement MBean creating is failed: name=" + beanName
+ ", transportManagementName is null");
}
if (routingLabelFormatName == null) {
throw new StartException("M3UAManagement MBean creating is failed: name=" + beanName
+ ", routingLabelFormatName is null");
}
Management transportManagement = beanSctpManagements.get(transportManagementName);
if (transportManagement == null) {
throw new StartException("M3UAManagement MBean creating is failed: name=" + beanName
+ ", transportManagement is not found: " + transportManagementName);
}
RoutingLabelFormat routingLabelFormat = routingLabelFormats.get(routingLabelFormatName);
if (routingLabelFormat == null) {
throw new StartException("M3UAManagement MBean creating is failed: name=" + beanName
+ ", routingLabelFormat is not found: " + routingLabelFormat);
}
M3UAManagementImpl m3uaManagement = null;
try {
m3uaManagement = new M3UAManagementImpl(beanName, m3uaManagementPropertyName);
m3uaManagement.setPersistDir(dataDir);
m3uaManagement.setTransportManagement(transportManagement);
m3uaManagement.setRoutingLabelFormat(routingLabelFormat);
List properties = m3uaNode.get("property").asPropertyList();
for (Property property : properties) {
String pName = property.getName();
if (pName.equals("maxSequenceNumber")) {
int vali = property.getValue().get("value").asInt();
m3uaManagement.setMaxSequenceNumber(vali);
} else if (pName.equals("maxAsForRoute")) {
int vali = property.getValue().get("value").asInt();
m3uaManagement.setMaxAsForRoute(vali);
} else if (pName.equals("deliveryMessageThreadCount")) {
int vali = property.getValue().get("value").asInt();
m3uaManagement.setDeliveryMessageThreadCount(vali);
}
}
this.beanMtp3UserParts.put(beanName, m3uaManagement);
this.beanM3uaManagementImpls.put(beanName, m3uaManagement);
} catch (Exception e) {
throw new StartException("M3UAManagement MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createDialogicStack(ModelNode dialogicNode, String beanName, String dataDir) throws StartException {
// DialogicStack
String dialogicManagementPropertyName = getPropertyString(beanName, "productName", "Restcomm-jSS7");
String routingLabelFormatName = getPropertyString(beanName, "routingLabelFormat", null);
int sourceModuleId = getPropertyInt(beanName, "sourceModuleId", 61);
int destinationModuleId = getPropertyInt(beanName, "destinationModuleId", 34);
if (routingLabelFormatName == null) {
throw new StartException("DialogicMtp3UserPart MBean creating is failed: name=" + beanName
+ ", routingLabelFormatName is null");
}
RoutingLabelFormat routingLabelFormat = routingLabelFormats.get(routingLabelFormatName);
if (routingLabelFormat == null) {
throw new StartException("DialogicMtp3UserPart MBean creating is failed: name=" + beanName
+ ", routingLabelFormat is not found: " + routingLabelFormat);
}
DialogicMtp3UserPart dialogicManagement = null;
try {
dialogicManagement = new DialogicMtp3UserPart(dialogicManagementPropertyName);
dialogicManagement.setRoutingLabelFormat(routingLabelFormat);
dialogicManagement.setSourceModuleId(sourceModuleId);
dialogicManagement.setDestinationModuleId(destinationModuleId);
this.beanMtp3UserParts.put(beanName, dialogicManagement);
this.beanDialogicImpls.put(beanName, dialogicManagement);
} catch (Exception e) {
throw new StartException("DialogicMtp3UserPart MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createIsupStack(ModelNode isupNode, String beanName, String dataDir) throws StartException {
// CircuitManager
CircuitManagerImpl circuitManager = null;
try {
circuitManager = new CircuitManagerImpl();
} catch (Exception e) {
throw new StartException("CircuitManager MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
// ISUPStack
String mtp3UserPartName = getPropertyString(beanName, "mtp3UserPart", null);
int localSpc = getPropertyInt(beanName, "localSpc", 0);
int ni = getPropertyInt(beanName, "ni", 2);
if (mtp3UserPartName == null) {
throw new StartException("IsupStack MBean creating is failed: name=" + beanName + ", mtp3UserPartName is null");
}
Mtp3UserPart mtp3UserPart = beanMtp3UserParts.get(mtp3UserPartName);
if (mtp3UserPart == null) {
throw new StartException("IsupStack MBean creating is failed: name=" + beanName + ", mtp3UserPart is not found"
+ mtp3UserPartName);
}
ISUPStackImpl isupStack = null;
try {
isupStack = new ISUPStackImpl(schedulerMBean, localSpc, ni);
isupStack.setMtp3UserPart(mtp3UserPart);
isupStack.setCircuitManager(circuitManager);
this.beanISUPStacks.put(beanName, isupStack);
} catch (Exception e) {
throw new StartException("IsupStack MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createIsupService(ModelNode serviceNode, String beanName, String dataDir) throws StartException {
String isupServiceName = getPropertyString(beanName, "serviceName", "ISUP");
String isupStackName = getPropertyString(beanName, "isupStack", null);
String jndiName = getPropertyString(beanName, "jndiName", "java:/restcomm/ss7/isup");
if (isupStackName == null) {
throw new StartException("IsupService MBean creating is failed: name=" + beanName + ", isupStackName is null");
}
ISUPStack isupStack = beanISUPStacks.get(isupStackName);
if (isupStack == null) {
throw new StartException("IsupService MBean creating is failed: name=" + beanName + ", isupStack is not found"
+ isupStackName);
}
try {
SS7Service isupSS7Service = new SS7Service(isupServiceName);
// isupSS7Service.setJndiName(jndiName);
isupSS7Service.setStack(isupStack.getIsupProvider());
this.beanSS7Services.put(beanName, isupSS7Service);
registerMBean(isupSS7Service, "org.mobicents.ss7:service=" + beanName);
} catch (Exception e) {
throw new StartException("IsupService MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createSccpStack(ModelNode sccpNode, String beanName, String dataDir) throws StartException {
// SccpStack
FastMap mtp3UserPartsTemp = new FastMap();
// ModelNode mtp3UserPartsNode = sccpNode.get("mtp3UserParts");
ModelNode mtp3UserPartsNode = peek(fullModel, "mbean", beanName, "property", "mtp3UserParts");
if (mtp3UserPartsNode != null) {
for (Property prop : mtp3UserPartsNode.get("entry").asPropertyList()) {
int key = prop.getValue().get("key").asInt();
String mtp3UserPartsName = prop.getValue().get("value").asString();
Mtp3UserPart mtp3UserPart = beanMtp3UserParts.get(mtp3UserPartsName);
if (mtp3UserPart == null) {
throw new StartException("SccpService MBean creating is failed: name=" + beanName
+ ", mtp3UserPart is not found" + mtp3UserPartsName);
}
mtp3UserPartsTemp.put(key, mtp3UserPart);
}
}
SccpStackImpl sccpStack = null;
try {
sccpStack = new SccpStackImpl(beanName);
sccpStack.setPersistDir(dataDir);
sccpStack.setMtp3UserParts(mtp3UserPartsTemp);
this.beanSccpStacks.put(beanName, sccpStack);
} catch (Exception e) {
throw new StartException("SccpStack MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createTcapStack(ModelNode tcapNode, String beanName, String dataDir) throws StartException {
// TcapStack
String sccpStackName = getPropertyString(beanName, "sccpStack", null);
if (sccpStackName == null) {
throw new StartException("SccpStack MBean creating is failed: name=" + beanName + ", sccpStackName is null");
}
SccpStackImpl sccpStack = beanSccpStacks.get(sccpStackName);
if (sccpStack == null) {
throw new StartException("SccpStack MBean creating is failed: name=" + beanName + ", sccpStack is not found"
+ sccpStackName);
}
int ssn = getPropertyInt(beanName, "ssn", 8);
boolean previewMode = getPropertyBoolean(beanName, "previewMode", false);
ModelNode extraSsnsNode = peek(fullModel, "mbean", beanName, "property", "extraSsns");
List extraSsnsNew = new FastList();
if (extraSsnsNode != null) {
for (Property prop : extraSsnsNode.get("entry").asPropertyList()) {
int key = prop.getValue().get("key").asInt();
int ssnVal = prop.getValue().get("value").asInt();
extraSsnsNew.add(ssnVal);
}
}
TCAPStackImpl tcapStack = null;
try {
tcapStack = new TCAPStackImpl(beanName, sccpStack.getSccpProvider(), ssn);
tcapStack.setPersistDir(dataDir);
tcapStack.setPreviewMode(previewMode);
if (extraSsnsNew != null && extraSsnsNew.size() > 0) {
tcapStack.setExtraSsns(extraSsnsNew);
}
this.beanTcapStacks.put(beanName, tcapStack);
} catch (Exception e) {
throw new StartException("TcapStack MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createTcapService(ModelNode serviceNode, String beanName, String dataDir) throws StartException {
String tcapServiceName = getPropertyString(beanName, "serviceName", "TCAP");
String tcapStackName = getPropertyString(beanName, "tcapStack", null);
String jndiName = getPropertyString(beanName, "jndiName", "java:/restcomm/ss7/tcap");
if (tcapStackName == null) {
throw new StartException("TcapService MBean creating is failed: name=" + beanName + ", tcapStackName is null");
}
TCAPStack tcapStack = beanTcapStacks.get(tcapStackName);
if (tcapStack == null) {
throw new StartException("TcapService MBean creating is failed: name=" + beanName + ", tcapStack is not found"
+ tcapStack);
}
try {
SS7Service tcapSS7Service = new SS7Service(tcapServiceName);
// tcapSS7Service.setJndiName(jndiName);
tcapSS7Service.setStack(tcapStack.getProvider());
this.beanSS7Services.put(beanName, tcapSS7Service);
registerMBean(tcapSS7Service, "org.mobicents.ss7:service=" + beanName);
} catch (Exception e) {
throw new StartException("TcapService MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createMapStack(ModelNode mapNode, String beanName, String dataDir) throws StartException {
// MapStack
String mapStackName = getPropertyString(beanName, "stackName", "MapStack");
String tcapStackName = getPropertyString(beanName, "tcapStack", null);
if (tcapStackName == null) {
throw new StartException("MapStack MBean creating is failed: name=" + beanName + ", tcapStackName is null");
}
TCAPStackImpl tcapStack = beanTcapStacks.get(tcapStackName);
if (tcapStack == null) {
throw new StartException("MapStack MBean creating is failed: name=" + beanName + ", tcapStack is not found"
+ tcapStack);
}
MAPStackImpl mapStack = null;
try {
mapStack = new MAPStackImpl(mapStackName, tcapStack.getProvider());
this.beanMapStacks.put(beanName, mapStack);
} catch (Exception e) {
throw new StartException("MapService MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createMapService(ModelNode serviceNode, String beanName, String dataDir) throws StartException {
String mapServiceName = getPropertyString(beanName, "serviceName", "MAP");
String mapStackName = getPropertyString(beanName, "mapStack", null);
String jndiName = getPropertyString(beanName, "jndiName", "java:/restcomm/ss7/map");
if (mapStackName == null) {
throw new StartException("MapService MBean creating is failed: name=" + beanName + ", mapStackName is null");
}
MAPStack mapStack = beanMapStacks.get(mapStackName);
if (mapStack == null) {
throw new StartException("MapService MBean creating is failed: name=" + beanName + ", mapStack is not found"
+ mapStack);
}
try {
SS7Service mapSS7Service = new SS7Service(mapServiceName);
// mapSS7Service.setJndiName(jndiName);
mapSS7Service.setStack(mapStack.getMAPProvider());
this.beanSS7Services.put(beanName, mapSS7Service);
registerMBean(mapSS7Service, "org.mobicents.ss7:service=" + beanName);
} catch (Exception e) {
throw new StartException("MapService MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createCapStack(ModelNode capNode, String beanName, String dataDir) throws StartException {
// CapStack
String capStackName = getPropertyString(beanName, "stackName", "CapStack");
String tcapStackName = getPropertyString(beanName, "tcapStack", null);
if (tcapStackName == null) {
throw new StartException("CapStack MBean creating is failed: name=" + beanName + ", tcapStackName is null");
}
TCAPStackImpl tcapStack = beanTcapStacks.get(tcapStackName);
if (tcapStack == null) {
throw new StartException("CapStack MBean creating is failed: name=" + beanName + ", tcapStack is not found"
+ tcapStack);
}
CAPStackImpl capStack = null;
try {
capStack = new CAPStackImpl(capStackName, tcapStack.getProvider());
this.beanCapStacks.put(beanName, capStack);
} catch (Exception e) {
throw new StartException("CapStack MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
private void createCapService(ModelNode serviceNode, String beanName, String dataDir) throws StartException {
String capServiceName = getPropertyString(beanName, "serviceName", "CAP");
String capStackName = getPropertyString(beanName, "capStack", null);
String jndiName = getPropertyString(beanName, "jndiName", "java:/restcomm/ss7/cap");
if (capStackName == null) {
throw new StartException("CapService MBean creating is failed: name=" + beanName + ", capStackName is null");
}
CAPStack capStack = beanCapStacks.get(capStackName);
if (capStack == null) {
throw new StartException("CapService MBean creating is failed: name=" + beanName + ", capStack is not found"
+ capStack);
}
try {
SS7Service capSS7Service = new SS7Service(capServiceName);
// capSS7Service.setJndiName(jndiName);
capSS7Service.setStack(capStack.getCAPProvider());
this.beanSS7Services.put(beanName, capSS7Service);
registerMBean(capSS7Service, "org.mobicents.ss7:service=" + beanName);
} catch (Exception e) {
throw new StartException("CapService MBean creating is failed: name=" + beanName + ", " + e.getMessage(), e);
}
}
@Override
public ShellExecutor getBeanSctpShellExecutor() {
return beanSctpShellExecutor;
}
@Override
public ShellExecutor getBeanM3uaShellExecutor() {
return beanM3uaShellExecutor;
}
@Override
public ShellExecutor getBeanSccpExecutor() {
return beanSccpExecutor;
}
@Override
public ShellExecutor getBeanTcapExecutor() {
return beanTcapExecutor;
}
@Override
public Ss7Management getSs7Management() {
return ss7ManagementMBean;
}
}