All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mobicents.ussdgateway.UssdShellExecutor Maven / Gradle / Ivy

/**
 * TeleStax, Open Source Cloud Communications  
 * Copyright 2012, Telestax Inc 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.ussdgateway;

import java.util.Arrays;
import java.util.List;

import org.apache.log4j.Logger;
import org.mobicents.ss7.management.console.ShellExecutor;
import org.mobicents.ussdgateway.rules.ScRoutingRule;
import org.mobicents.ussdgateway.rules.ScRoutingRuleType;

/**
 * @author amit bhayani
 * 
 */
public class UssdShellExecutor implements ShellExecutor {

	private static final Logger logger = Logger.getLogger(UssdShellExecutor.class);

	private UssdManagement ussdManagement;
	private UssdPropertiesManagement ussdPropertiesManagement = UssdPropertiesManagement.getInstance();
	private ShortCodeRoutingRuleManagement shortCodeRoutingRuleManagement = ShortCodeRoutingRuleManagement
			.getInstance();

	/**
	 * 
	 */
	public UssdShellExecutor() {
		// TODO Auto-generated constructor stub
	}

	public UssdManagement getUssdManagement() {
		return ussdManagement;
	}

	public void setUssdManagement(UssdManagement ussdManagement) {
		this.ussdManagement = ussdManagement;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.mobicents.ss7.management.console.ShellExecutor#execute(java.lang.
	 * String[])
	 */
	@Override
	public String execute(String[] commands) {

		try {
			if (commands.length < 2) {
				return UssdOAMMessages.INVALID_COMMAND;
			}
			String command = commands[1];

			if (command.equals("scrule")) {
				return this.manageScRule(commands);
			} else if (command.equals("set")) {
				return this.manageSet(commands);
			} else if (command.equals("get")) {
				return this.manageGet(commands);
			}
			return UssdOAMMessages.INVALID_COMMAND;
		} catch (Exception e) {
			logger.error(String.format("Error while executing comand %s", Arrays.toString(commands)), e);
			return e.getMessage();
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.mobicents.ss7.management.console.ShellExecutor#handles(java.lang.
	 * String)
	 */
	@Override
	public boolean handles(String command) {
		return "ussd".equals(command);
	}

	private String manageScRule(String[] commands) throws Exception {
		String command = commands[2];
		if (command.equals("create")) {
			return this.createScRule(commands);
		} else if (command.equals("modify")) {
			return this.modifyScRule(commands);
		} else if (command.equals("delete")) {
			return this.deleteScRule(commands);
		} else if (command.equals("show")) {
			return this.showScRule(commands);
		}
		return UssdOAMMessages.INVALID_COMMAND;
	}

	/**
	 * 

* Command is ussd scrule create *

*

* By default its assumed that routing rule is HTTP. However if you want to * set SIP user below command using SIP. If its HTTP, the second parameter * will be considered as http-url. networkId is not mandatory and by default * is 0. Exact match is not mandatory and by default is true. *

*

* ussd scrule create *

* * @param commands * @return * @throws Exception */ private String createScRule(String[] commands) throws Exception { if (commands.length < 5 || commands.length > 8) { return UssdOAMMessages.INVALID_COMMAND; } String shortCode = commands[3]; String url = commands[4]; ScRoutingRuleType ruleType = ScRoutingRuleType.HTTP; boolean exactmatch = true; int networkId = 0; if (commands.length > 5) { String args6 = commands[5]; if (args6.equals("true") || args6.equals("false")) { exactmatch = Boolean.parseBoolean(args6); } else if (args6.equals("HTTP") || args6.equals("SIP")) { ruleType = ScRoutingRuleType.valueOf(args6); } else { networkId = Integer.parseInt(args6); } } if (commands.length > 6) { String args7 = commands[6]; if (args7.equals("true") || args7.equals("false")) { exactmatch = Boolean.parseBoolean(args7); } else if (args7.equals("HTTP") || args7.equals("SIP")) { ruleType = ScRoutingRuleType.valueOf(args7); } else { networkId = Integer.parseInt(args7); } } if (commands.length > 7) { String args8 = commands[7]; if (args8.equals("true") || args8.equals("false")) { exactmatch = Boolean.parseBoolean(args8); } else if (args8.equals("HTTP") || args8.equals("SIP")) { ruleType = ScRoutingRuleType.valueOf(args8); } else { networkId = Integer.parseInt(args8); } } if (ruleType == null) { return UssdOAMMessages.INVALID_COMMAND; } shortCodeRoutingRuleManagement.createScRoutingRule(shortCode, ruleType, url, exactmatch, networkId); return String.format(UssdOAMMessages.CREATE_SC_RULE_SUCCESSFULL, shortCode, networkId); } /** *

* Command is ussd scrule modify *

*

* By default its assumed that routing rule is HTTP. However if you want to * set SIP user below command using SIP. If its HTTP, the second parameter * will be considered as http-url. networkId is not mandatory and by default * is 0. Exact match is not mandatory and by default is true. *

*

* ussd scrule modify *

* * @param commands * @return * @throws Exception */ private String modifyScRule(String[] commands) throws Exception { if (commands.length < 5 || commands.length > 8) { return UssdOAMMessages.INVALID_COMMAND; } String shortCode = commands[3]; String url = commands[4]; ScRoutingRuleType ruleType = ScRoutingRuleType.HTTP; boolean exactmatch = true; int networkId = 0; if (commands.length > 5) { String args6 = commands[5]; if (args6.equals("true") || args6.equals("false")) { exactmatch = Boolean.parseBoolean(args6); } else if (args6.equals("HTTP") || args6.equals("SIP")) { ruleType = ScRoutingRuleType.valueOf(args6); } else { networkId = Integer.parseInt(args6); } } if (commands.length > 6) { String args7 = commands[6]; if (args7.equals("true") || args7.equals("false")) { exactmatch = Boolean.parseBoolean(args7); } else if (args7.equals("HTTP") || args7.equals("SIP")) { ruleType = ScRoutingRuleType.valueOf(args7); } else { networkId = Integer.parseInt(args7); } } if (commands.length > 7) { String args8 = commands[7]; if (args8.equals("true") || args8.equals("false")) { exactmatch = Boolean.parseBoolean(args8); } else if (args8.equals("HTTP") || args8.equals("SIP")) { ruleType = ScRoutingRuleType.valueOf(args8); } else { networkId = Integer.parseInt(args8); } } if (ruleType == null) { return UssdOAMMessages.INVALID_COMMAND; } shortCodeRoutingRuleManagement.modifyScRoutingRule(shortCode, ruleType, url, exactmatch, networkId); return String.format(UssdOAMMessages.MODIFY_SC_RULE_SUCCESSFULL, shortCode, networkId); } /** * Command is ussd scrule delete * * @param commands * @return * @throws Exception */ private String deleteScRule(String[] commands) throws Exception { if (commands.length < 4 || commands.length > 5) { return UssdOAMMessages.INVALID_COMMAND; } String shortCode = commands[3]; int networkId = 0; if (commands.length > 4) { String args6 = commands[4]; networkId = Integer.parseInt(args6); } shortCodeRoutingRuleManagement.deleteScRoutingRule(shortCode, networkId); return String.format(UssdOAMMessages.DELETE_SC_RULE_SUCCESSFUL, shortCode, networkId); } /** * Command is ussd scrule show * * @return */ private String showScRule(String[] commands) { List rules = this.shortCodeRoutingRuleManagement.getScRoutingRuleList(); if (rules.size() == 0) { return UssdOAMMessages.NO_SC_RULE_DEFINED_YET; } StringBuffer sb = new StringBuffer(); if (commands.length >= 4) { String shortCode = commands[3]; int networkId = 0; if (commands.length > 4) { String args6 = commands[4]; networkId = Integer.parseInt(args6); } ScRoutingRule scRule = shortCodeRoutingRuleManagement.getScRoutingRule(shortCode, networkId); if (scRule == null) { return UssdOAMMessages.INVALID_SC; } else { sb.append(UssdOAMMessages.NEW_LINE); scRule.show(sb); } } else { for (ScRoutingRule scRule : rules) { sb.append(UssdOAMMessages.NEW_LINE); scRule.show(sb); } } return sb.toString(); } private String manageSet(String[] options) throws Exception { if (options.length < 4) { return UssdOAMMessages.INVALID_COMMAND; } String parName = options[2].toLowerCase(); if (parName.equals(UssdPropertiesManagement.NO_ROUTING_RULE_CONFIGURED_ERROR_MESSAGE)) { ussdPropertiesManagement.setNoRoutingRuleConfiguredMessage(this.formFullMessage(options, 3)); } else if (parName.equals(UssdPropertiesManagement.DIALOG_TIMEOUT_ERROR_MESSAGE)) { ussdPropertiesManagement.setDialogTimeoutErrorMessage(this.formFullMessage(options, 3)); } else if (parName.equals(UssdPropertiesManagement.SERVER_ERROR_MESSAGE)) { ussdPropertiesManagement.setServerErrorMessage(this.formFullMessage(options, 3)); } else if (parName.equals(UssdPropertiesManagement.DIALOG_TIMEOUT)) { ussdPropertiesManagement.setDialogTimeout(Long.parseLong(options[3])); } else if (parName.equals(UssdPropertiesManagement.USSD_GT)) { String gt = options[3]; if (options.length >= 6 && options[4].equals("networkid")) { int val = Integer.parseInt(options[5]); ussdPropertiesManagement.setUssdGt(val, gt); } else { ussdPropertiesManagement.setUssdGt(gt); } } else if (parName.equals(UssdPropertiesManagement.USSD_SSN)) { ussdPropertiesManagement.setUssdSsn(Integer.parseInt(options[3])); } else if (parName.equals(UssdPropertiesManagement.HLR_SSN)) { ussdPropertiesManagement.setHlrSsn(Integer.parseInt(options[3])); } else if (parName.equals(UssdPropertiesManagement.MSC_SSN)) { ussdPropertiesManagement.setMscSsn(Integer.parseInt(options[3])); } else if (parName.equals(UssdPropertiesManagement.MAX_MAP_VERSION)) { ussdPropertiesManagement.setMaxMapVersion(Integer.parseInt(options[3])); } else if (parName.equals(UssdPropertiesManagement.HR_HLR_GT)) { if (options[3].equals("null")) { System.err.println("setting null"); ussdPropertiesManagement.setHrHlrGt(null); } else { System.err.println("its not null"); ussdPropertiesManagement.setHrHlrGt(options[3]); } } else if (parName.equals(UssdPropertiesManagement.CDR_LOGGING_TO)) { UssdPropertiesManagement.CdrLoggedType cdrLoggedType = Enum.valueOf( UssdPropertiesManagement.CdrLoggedType.class, options[3]); ussdPropertiesManagement.setCdrLoggingTo(cdrLoggedType); } else { return UssdOAMMessages.INVALID_COMMAND; } return UssdOAMMessages.PARAMETER_SUCCESSFULLY_SET; } private String formFullMessage(String[] options, int fromIndex) { StringBuffer sb = new StringBuffer(); for (int count = fromIndex; count < options.length; count++) { sb.append(options[count]); if (count != (options.length - 1)) { sb.append(UssdOAMMessages.SPACE); } } return sb.toString(); } private String manageGet(String[] options) throws Exception { if (options.length == 3) { String parName = options[2].toLowerCase(); StringBuilder sb = new StringBuilder(); sb.append(options[2]); sb.append(" = "); if (parName.equals(UssdPropertiesManagement.NO_ROUTING_RULE_CONFIGURED_ERROR_MESSAGE)) { sb.append(ussdPropertiesManagement.getNoRoutingRuleConfiguredMessage()); } else if (parName.equals(UssdPropertiesManagement.DIALOG_TIMEOUT_ERROR_MESSAGE)) { sb.append(ussdPropertiesManagement.getDialogTimeoutErrorMessage()); } else if (parName.equals(UssdPropertiesManagement.SERVER_ERROR_MESSAGE)) { sb.append(ussdPropertiesManagement.getServerErrorMessage()); } else if (parName.equals(UssdPropertiesManagement.DIALOG_TIMEOUT)) { sb.append(ussdPropertiesManagement.getDialogTimeout()); } else if (parName.equals(UssdPropertiesManagement.USSD_GT)) { sb.append("networkId=0 - GT="); sb.append(ussdPropertiesManagement.getUssdGt()); for (Integer key : ussdPropertiesManagement.getNetworkIdVsUssdGwGt().keySet()) { sb.append("\nnetworkId="); sb.append(key); sb.append(" - GT="); sb.append(ussdPropertiesManagement.getNetworkIdVsUssdGwGt().get(key)); } } else if (parName.equals(UssdPropertiesManagement.USSD_SSN)) { sb.append(ussdPropertiesManagement.getUssdSsn()); } else if (parName.equals(UssdPropertiesManagement.HLR_SSN)) { sb.append(ussdPropertiesManagement.getHlrSsn()); } else if (parName.equals(UssdPropertiesManagement.MSC_SSN)) { sb.append(ussdPropertiesManagement.getMscSsn()); } else if (parName.equals(UssdPropertiesManagement.MAX_MAP_VERSION)) { sb.append(ussdPropertiesManagement.getMaxMapVersion()); } else if (parName.equals(UssdPropertiesManagement.HR_HLR_GT)) { sb.append(ussdPropertiesManagement.getHrHlrGt()); } else if (parName.equals(UssdPropertiesManagement.CDR_LOGGING_TO)) { sb.append(ussdPropertiesManagement.getCdrLoggingTo()); } else { return UssdOAMMessages.INVALID_COMMAND; } return sb.toString(); } else { StringBuilder sb = new StringBuilder(); sb.append(UssdPropertiesManagement.NO_ROUTING_RULE_CONFIGURED_ERROR_MESSAGE + " = "); sb.append(ussdPropertiesManagement.getNoRoutingRuleConfiguredMessage()); sb.append("\n"); sb.append(UssdPropertiesManagement.DIALOG_TIMEOUT_ERROR_MESSAGE + " = "); sb.append(ussdPropertiesManagement.getDialogTimeoutErrorMessage()); sb.append("\n"); sb.append(UssdPropertiesManagement.DIALOG_TIMEOUT + " = "); sb.append(ussdPropertiesManagement.getDialogTimeout()); sb.append("\n"); sb.append(UssdPropertiesManagement.SERVER_ERROR_MESSAGE + " = "); sb.append(ussdPropertiesManagement.getServerErrorMessage()); sb.append("\n"); sb.append("networkId=0 - GT="); sb.append(ussdPropertiesManagement.getUssdGt()); for (Integer key : ussdPropertiesManagement.getNetworkIdVsUssdGwGt().keySet()) { sb.append("\nnetworkId="); sb.append(key); sb.append(" - GT="); sb.append(ussdPropertiesManagement.getNetworkIdVsUssdGwGt().get(key)); } sb.append("\n"); sb.append(UssdPropertiesManagement.USSD_SSN + " = "); sb.append(ussdPropertiesManagement.getUssdSsn()); sb.append("\n"); sb.append(UssdPropertiesManagement.HLR_SSN + " = "); sb.append(ussdPropertiesManagement.getHlrSsn()); sb.append("\n"); sb.append(UssdPropertiesManagement.MSC_SSN + " = "); sb.append(ussdPropertiesManagement.getMscSsn()); sb.append("\n"); sb.append(UssdPropertiesManagement.MAX_MAP_VERSION + " = "); sb.append(ussdPropertiesManagement.getMaxMapVersion()); sb.append("\n"); sb.append(UssdPropertiesManagement.HR_HLR_GT + " = "); sb.append(ussdPropertiesManagement.getHrHlrGt()); sb.append("\n"); sb.append(UssdPropertiesManagement.CDR_LOGGING_TO + " = "); sb.append(ussdPropertiesManagement.getCdrLoggingTo()); sb.append("\n"); return sb.toString(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy