/* * TeleStax, Open Source Cloud Communications * Copyright 2011-2013, Telestax Inc and individual contributors * by the @authors tag. * * This program is free software: you can redistribute it and/or modify * under the terms of the GNU Affero General Public License as * published by the Free Software Foundation; either version 3 of * the License, or (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/> */ package org.mobicents.protocols.ss7.tcapAnsi.oam; import java.util.Arrays; import java.util.Map; import javolution.util.FastMap; import org.apache.log4j.Logger; import org.mobicents.protocols.ss7.tcapAnsi.TCAPStackImpl; import org.mobicents.ss7.management.console.ShellExecutor; /** * @author Amit Bhayani * @author sergey vetyutnev * */ public class TCAPAnsiExecutor implements ShellExecutor { private static final Logger logger = Logger.getLogger(TCAPAnsiExecutor.class); private FastMap<String, TCAPStackImpl> tcapStacks = new FastMap<String, TCAPStackImpl>(); public TCAPAnsiExecutor() { } public Map<String, TCAPStackImpl> getTcapStacks() { return tcapStacks; } public void setTcapStacks(Map<String, TCAPStackImpl> mtp3UserPartsTemp) { if (mtp3UserPartsTemp != null) { synchronized (this) { FastMap<String, TCAPStackImpl> newMtp3UserPart = new FastMap<String, TCAPStackImpl>(); newMtp3UserPart.putAll(mtp3UserPartsTemp); this.tcapStacks = newMtp3UserPart; } } } /* * (non-Javadoc) * * @see org.mobicents.ss7.management.console.ShellExecutor#execute(java.lang.String[]) */ @Override public String execute(String[] options) { if (this.tcapStacks == null || this.tcapStacks.size() == 0) { logger.warn("TCAPStackImpl not set. Command will not be executed "); return TCAPAnsiOAMMessage.SERVER_ERROR; } // At least 1 option is passed? if (options == null || options.length < 2) { return TCAPAnsiOAMMessage.INVALID_COMMAND; } String firstOption = options[1]; if (firstOption == null) { return TCAPAnsiOAMMessage.INVALID_COMMAND; } try { if (firstOption.equals("set")) { return this.manageSet(options); } else if (firstOption.equals("get")) { return this.manageGet(options); } // } catch (Exception e) { // logger.error(String.format("Error while executing command %s", Arrays.toString(options)), e); // return e.getMessage(); } catch (Throwable t) { logger.error(String.format("Error while executing comand %s", Arrays.toString(options)), t); return t.getMessage(); } return TCAPAnsiOAMMessage.INVALID_COMMAND; } /* * (non-Javadoc) * * @see org.mobicents.ss7.management.console.ShellExecutor#handles(java.lang.String) */ @Override public boolean handles(String command) { return command.startsWith("tcapansi"); } /** * Command is tcapansi set <param-name> <name of stack> <value> * * @param options * @return * @throws Exception */ private String manageSet(String[] options) throws Exception { // Minimum 4 needed. Show if (options.length < 5) { return TCAPAnsiOAMMessage.INVALID_COMMAND; } String parName = options[2].toLowerCase(); String tcapStackName = options[3].toLowerCase(); TCAPStackImpl tcapStackImpl = this.tcapStacks.get(tcapStackName); if (tcapStackImpl == null) { return String.format(TCAPAnsiOAMMessage.NO_TCAP_STCAK_CONFIGURE, tcapStackName); } if (parName.equals("dialogidletimeout")) { long val = Long.parseLong(options[4]); tcapStackImpl.setDialogIdleTimeout(val); } else if (parName.equals("invoketimeout")) { long val = Long.parseLong(options[4]); tcapStackImpl.setInvokeTimeout(val); } else if (parName.equals("maxdialogs")) { int val = Integer.parseInt(options[4]); tcapStackImpl.setMaxDialogs(val); } else if (parName.equals("dialogidrangestart")) { long val = Long.parseLong(options[4]); tcapStackImpl.setDialogIdRangeStart(val); } else if (parName.equals("dialogidrangeend")) { long val = Long.parseLong(options[4]); tcapStackImpl.setDialogIdRangeEnd(val); // } else if (parName.equals("previewmode")) { // boolean val = Boolean.parseBoolean(options[4]); // tcapStackImpl.setPreviewMode(val); } else if (parName.equals("statisticsenabled")) { boolean val = Boolean.parseBoolean(options[4]); tcapStackImpl.setStatisticsEnabled(val); }else if (parName.equals("slsranger")) { String val = String.valueOf(options[3]); tcapStackImpl.setSlsRange(val); } else { return TCAPAnsiOAMMessage.INVALID_COMMAND; } return TCAPAnsiOAMMessage.PARAMETER_SUCCESSFULLY_SET; } /** * Command is tcapansi get <param-name> <name of stack> * * @param options * @return * @throws Exception */ private String manageGet(String[] options) throws Exception { // Minimum 2 needed. Show if (options.length < 2) { return TCAPAnsiOAMMessage.INVALID_COMMAND; } if (options.length == 4) { String parName = options[2].toLowerCase(); String tcapStackName = options[3].toLowerCase(); TCAPStackImpl tcapStackImpl = this.tcapStacks.get(tcapStackName); if (tcapStackImpl == null) { return String.format(TCAPAnsiOAMMessage.NO_TCAP_STCAK_CONFIGURE, tcapStackName); } StringBuilder sb = new StringBuilder(); sb.append(options[2]); sb.append(" = "); if (parName.equals("dialogidletimeout")) { sb.append(tcapStackImpl.getDialogIdleTimeout()); } else if (parName.equals("invoketimeout")) { sb.append(tcapStackImpl.getInvokeTimeout()); } else if (parName.equals("maxdialogs")) { sb.append(tcapStackImpl.getMaxDialogs()); } else if (parName.equals("dialogidrangestart")) { sb.append(tcapStackImpl.getDialogIdRangeStart()); } else if (parName.equals("dialogidrangeend")) { sb.append(tcapStackImpl.getDialogIdRangeEnd()); } else if (parName.equals("previewmode")) { sb.append(tcapStackImpl.getPreviewMode()); } else if (parName.equals("statisticsenabled")) { sb.append(tcapStackImpl.getStatisticsEnabled()); }else if (parName.equals("slsrange")) { sb.append(tcapStackImpl.getSlsRange()); } else { return TCAPAnsiOAMMessage.INVALID_COMMAND; } return sb.toString(); } else { StringBuilder sb = new StringBuilder(); for (FastMap.Entry<String, TCAPStackImpl> e = this.tcapStacks.head(), end = this.tcapStacks.tail(); (e = e .getNext()) != end;) { TCAPStackImpl tcapStackImpl = e.getValue(); String tcapStackname = e.getKey(); sb.append("Properties for "); sb.append(tcapStackname); sb.append("\n"); sb.append("*******************\n"); sb.append("dialogidletimeout = "); sb.append(tcapStackImpl.getDialogIdleTimeout()); sb.append("\n"); sb.append("invoketimeout = "); sb.append(tcapStackImpl.getInvokeTimeout()); sb.append("\n"); sb.append("maxdialogs = "); sb.append(tcapStackImpl.getMaxDialogs()); sb.append("\n"); sb.append("dialogidrangestart = "); sb.append(tcapStackImpl.getDialogIdRangeStart()); sb.append("\n"); sb.append("dialogidrangeend = "); sb.append(tcapStackImpl.getDialogIdRangeEnd()); sb.append("\n"); sb.append("previewmode = "); sb.append(tcapStackImpl.getPreviewMode()); sb.append("\n"); sb.append("statisticsenabled = "); sb.append(tcapStackImpl.getStatisticsEnabled()); sb.append("\n"); sb.append("slsrange = "); sb.append(tcapStackImpl.getSlsRange()); sb.append("\n"); sb.append("*******************"); sb.append("\n"); sb.append("\n"); } return sb.toString(); } } }