/* * 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.smsc.domain; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import javolution.util.FastList; import javolution.util.FastMap; import org.apache.log4j.Logger; import org.mobicents.protocols.ss7.indicator.GlobalTitleIndicator; import org.mobicents.protocols.ss7.map.api.MAPApplicationContextVersion; import org.mobicents.smsc.cassandra.SmsRoutingRuleType; import org.mobicents.smsc.library.DbSmsRoutingRule; import org.mobicents.smsc.library.SmsSetCache; import org.mobicents.smsc.mproc.MProcRule; import org.mobicents.smsc.mproc.impl.MProcRuleOamMessages; import org.mobicents.ss7.management.console.ShellExecutor; import org.restcomm.smpp.SmppEncoding; /** * @author amit bhayani * @author sergey vetyutnev * @author tran nhan * */ public class SMSCShellExecutor implements ShellExecutor { private static final Logger logger = Logger.getLogger(SMSCShellExecutor.class); private SmscManagement smscManagement; private static SmscPropertiesManagement smscPropertiesManagement; private static final MapVersionCache mapVersionCache = MapVersionCache.getInstance(); private static final String LINE_SEPARATOR = System.getProperty("line.separator"); private static final String MAP_CACHE_KEY_VALUE_SEPARATOR = " : "; public SMSCShellExecutor() { } public void start() throws Exception { smscPropertiesManagement = SmscPropertiesManagement.getInstance(this.getSmscManagement().getName()); if (logger.isInfoEnabled()) { logger.info("Started SMSCShellExecutor " + this.getSmscManagement().getName()); } } /** * @return the m3uaManagement */ public SmscManagement getSmscManagement() { return smscManagement; } /** * @param m3uaManagement * the m3uaManagement to set */ public void setSmscManagement(SmscManagement smscManagement) { this.smscManagement = smscManagement; } private String showSip() { SipManagement sipManagement = SipManagement.getInstance(); List<Sip> sips = sipManagement.getSips(); if (sips.size() == 0) { return SMSCOAMMessages.NO_SIP_DEFINED_YET; } StringBuffer sb = new StringBuffer(); for (Sip sip : sips) { sb.append(SMSCOAMMessages.NEW_LINE); sip.show(sb); } return sb.toString(); } /** * Command is smsc sip modify name cluster-name <clusterName> host <ip> port * <port> routing-ton <routing address ton> routing-npi <routing address * npi> routing-range <routing address range> counters-enabled <true | * false> charging-enabled <true | false> networkid <network-d> * * @param args * @return * @throws Exception */ private String modifySip(String[] args) throws Exception { if (args.length < 6 || args.length > 22) { return SMSCOAMMessages.INVALID_COMMAND; } // modify existing SIP String name = args[3]; if (name == null) { return SMSCOAMMessages.INVALID_COMMAND; } SipManagement sipManagement = SipManagement.getInstance(); Sip sip = sipManagement.getSipByName(name); if (sip == null) { return String.format(SMSCOAMMessages.SIP_NOT_FOUND, name); } int count = 4; String command; boolean success = false; while (count < (args.length - 1) && ((command = args[count++]) != null)) { String value = args[count++]; if (command.equals("cluster-name")) { sip.setClusterName(value); success = true; } else if (command.equals("host")) { sip.setHost(value); success = true; } else if (command.equals("port")) { sip.setPort(Integer.parseInt(value)); success = true; } else if (command.equals("networkid")) { sip.setNetworkId(Integer.parseInt(value)); success = true; } else if (command.equals("routing-ton")) { sip.setRoutingTon(Integer.parseInt(value)); success = true; } else if (command.equals("routing-npi")) { sip.setRoutingNpi(Integer.parseInt(value)); success = true; } else if (command.equals("routing-range")) { sip.setRoutingAddressRange(value); success = true; } else if (command.equals("counters-enabled")) { sip.setCountersEnabled(Boolean.parseBoolean(value)); success = true; } else if (command.equals("charging-enabled")) { sip.setChargingEnabled(Boolean.parseBoolean(value)); success = true; } else if (command.equals("networkid")) { sip.setNetworkId(Integer.parseInt(value)); success = true; } }// while if (!success) { return SMSCOAMMessages.INVALID_COMMAND; } return String.format(SMSCOAMMessages.SIP_MODIFY_SUCCESS, name); } /** * Command is mproc add factoryName <id> desttonmask <destination type of number> * destnpimask <destination numbering plan indicator> destdigmask <regular * expression - destination number digits mask> originatingmask <mo | hr | * esme | sip> networkidmask <networkId value> newnetworkid <new networkId * value> newdestton <new destination type of number> newdestnpi <new * destination numbering plan indicator> addestdigprefix <prefix> makecopy * <false | true> * * @param args * @return * @throws Exception */ private String addMProc(String[] args) throws Exception { if (args.length < 6 || args.length > 27) { return SMSCOAMMessages.INVALID_COMMAND; } // create new MProcRule MProcManagement mProcManagement = MProcManagement.getInstance(); String factoryName = args[3]; int id = Integer.parseInt(args[4]); MProcRule mProcRule = mProcManagement.getMProcRuleById(id); if (mProcRule != null) { return String.format(MProcRuleOamMessages.CREATE_MPROC_RULE_FAIL_ALREADY_EXIST, id); } String parametersString = this.assembleString(args, 5); mProcManagement.createMProcRule(id, factoryName, parametersString); return String.format(SMSCOAMMessages.MPROC_CREATE_SUCCESS, id); } private String assembleString(String[] args, int firstArg) { StringBuilder sb = new StringBuilder(); boolean isFirst = true; for (int i1 = firstArg; i1 < args.length; i1++) { if (isFirst) { isFirst = false; } else sb.append(" "); sb.append(args[i1]); } return sb.toString(); } /** * Command is mproc modify <id> desttonmask <destination type of number> * destnpimask <destination numbering plan indicator> destdigmask <regular * expression - destination number digits mask> originatingmask <mo | hr | * esme | sip> networkidmask <networkId value> newnetworkid <new networkId * value> newdestton <new destination type of number> newdestnpi <new * destination numbering plan indicator> addestdigprefix <prefix> makecopy * <false | true> * * @param args * @return * @throws Exception */ private String modifyMProc(String[] args) throws Exception { if (args.length < 5 || args.length > 26) { return SMSCOAMMessages.INVALID_COMMAND; } // modify of existing MProcRule int id = Integer.parseInt(args[3]); MProcManagement mProcManagement = MProcManagement.getInstance(); String parametersString = this.assembleString(args, 4); mProcManagement.modifyMProcRule(id, parametersString); return String.format(SMSCOAMMessages.MPROC_MODIFY_SUCCESS, id); } /** * Command is mproc destroy <id> * * @param args * @return * @throws Exception */ private String removeMProc(String[] args) throws Exception { if (args.length < 4 || args.length > 4) { return SMSCOAMMessages.INVALID_COMMAND; } // destroy of existing MProcRule int id = Integer.parseInt(args[3]); MProcManagement mProcManagement = MProcManagement.getInstance(); mProcManagement.destroyMProcRule(id); return String.format(SMSCOAMMessages.MPROC_DESTROY_SUCCESS, id); } /** * Command is "show destroy <id>" or "show destroy" * * @param args * @return * @throws Exception */ private String showMProc(String[] args) throws Exception { if (args.length < 3 || args.length > 4) { return SMSCOAMMessages.INVALID_COMMAND; } // show of existing MProcRule / all MProcRule MProcManagement mProcManagement = MProcManagement.getInstance(); if (args.length == 3) { FastList<MProcRule> lst = mProcManagement.getMProcRules(); StringBuilder sb = new StringBuilder(); if (lst.size() == 0) { sb.append(SMSCOAMMessages.MPROC_NO_RULES); } else { for (MProcRule rule : lst) { sb.append(rule.toString()); sb.append("\n"); } } return sb.toString(); } else { int id = Integer.parseInt(args[3]); MProcRule rule = mProcManagement.getMProcRuleById(id); if (rule == null) { return String.format(SMSCOAMMessages.MPROC_NO_RULE, id); } return rule.toString(); } } private String addHttpUser(String[] args) throws Exception { if (args.length < 4 || args.length > 30) { return SMSCOAMMessages.INVALID_COMMAND; } // create new HttpUser HttpUsersManagement httpUsersManagement = HttpUsersManagement.getInstance(); String userName = args[3]; if (userName == null) { return SMSCOAMMessages.INVALID_COMMAND; } int count = 4; String password = ""; int networkId = -1; while (count < args.length) { // These are all optional parameters for a Tx/Rx/Trx binds String key = args[count++]; if (key == null) { return SMSCOAMMessages.INVALID_COMMAND; } if (key.equals("password")) { password = args[count++]; } else if (key.equals("networkId")) { networkId = Integer.parseInt(args[count++]); } else { return SMSCOAMMessages.INVALID_COMMAND; } } httpUsersManagement.createHttpUser(userName, password, networkId); return String.format(SMSCOAMMessages.HTTPUSER_CREATE_SUCCESS, userName); } private String modifyHttpUser(String[] args) throws Exception { if (args.length < 4 || args.length > 30) { return SMSCOAMMessages.INVALID_COMMAND; } HttpUsersManagement httpUsersManagement = HttpUsersManagement.getInstance(); String userName = args[3]; if (userName == null) { return SMSCOAMMessages.INVALID_COMMAND; } HttpUser httpUser = httpUsersManagement.getHttpUserByName(userName); if (httpUser == null) { throw new Exception(String.format(SMSCOAMMessages.HTTPUSER_NO_HTTPUSER, userName)); } int count = 4; while (count < args.length) { String key = args[count++]; if (key == null) { return SMSCOAMMessages.INVALID_COMMAND; } if (key.equals("password")) { httpUser.setPassword(args[count++]); } else if (key.equals("networkId")) { httpUser.setNetworkId(Integer.parseInt(args[count++])); } else { return SMSCOAMMessages.INVALID_COMMAND; } } return String.format(SMSCOAMMessages.HTTPUSER_MODIFY_SUCCESS, httpUser.getUserName()); } private String removeHttpUser(String[] args) throws Exception { if (args.length < 4) { return SMSCOAMMessages.INVALID_COMMAND; } HttpUsersManagement httpUsersManagement = HttpUsersManagement.getInstance(); String userName = args[3]; if (userName == null) { return SMSCOAMMessages.INVALID_COMMAND; } HttpUser httpUser = httpUsersManagement.getHttpUserByName(userName); if (httpUser == null) { throw new Exception(String.format(SMSCOAMMessages.HTTPUSER_NO_HTTPUSER, userName)); } httpUsersManagement.destroyHttpUser(userName); return String.format(SMSCOAMMessages.HTTPUSER_REMOVE_SUCCESS, userName); } private String showHttpUser(String[] args) { if (args.length < 3) { return SMSCOAMMessages.INVALID_COMMAND; } String userName = null; if (args.length > 3) { userName = args[3]; } HttpUsersManagement httpUsersManagement = HttpUsersManagement.getInstance(); StringBuffer sb = new StringBuffer(); if (userName == null) { // all HttpUsers List<HttpUser> httpUsers = httpUsersManagement.getHttpUsers(); if (httpUsers.size() == 0) { return SMSCOAMMessages.NO_HTTPUSER_DEFINED_YET; } for (HttpUser httpUser : httpUsers) { sb.append(SMSCOAMMessages.NEW_LINE); httpUser.show(sb); } } else { // a selected HttpUser HttpUser httpUser = httpUsersManagement.getHttpUserByName(userName); if (httpUser == null) { return String.format(SMSCOAMMessages.HTTPUSER_NO_HTTPUSER, userName); } httpUser.show(sb); } return sb.toString(); } private String executeSmsc(String[] args) { try { if (args.length < 2 || args.length > 50) { // any command will have atleast 3 args return SMSCOAMMessages.INVALID_COMMAND; } if (args[1] == null) { return SMSCOAMMessages.INVALID_COMMAND; } if (args[1].equals("sip")) { String rasCmd = args[2]; if (rasCmd == null) { return SMSCOAMMessages.INVALID_COMMAND; } if (rasCmd.equals("modify")) { return this.modifySip(args); } else if (rasCmd.equals("show")) { return this.showSip(); } return SMSCOAMMessages.INVALID_COMMAND; } else if (args[1].equals("mproc")) { String rasCmd = args[2]; if (rasCmd == null) { return SMSCOAMMessages.INVALID_COMMAND; } if (rasCmd.equals("add")) { return this.addMProc(args); } else if (rasCmd.equals("modify")) { return this.modifyMProc(args); } else if (rasCmd.equals("remove")) { return this.removeMProc(args); } else if (rasCmd.equals("show")) { return this.showMProc(args); } return SMSCOAMMessages.INVALID_COMMAND; } else if (args[1].equals("httpuser")) { String rasCmd = args[2]; if (rasCmd == null) { return SMSCOAMMessages.INVALID_COMMAND; } if (rasCmd.equals("add")) { return this.addHttpUser(args); } else if (rasCmd.equals("modify")) { return this.modifyHttpUser(args); } else if (rasCmd.equals("remove")) { return this.removeHttpUser(args); } else if (rasCmd.equals("show")) { return this.showHttpUser(args); } return SMSCOAMMessages.INVALID_COMMAND; } else if (args[1].equals("set")) { return this.manageSet(args); } else if (args[1].equals("get")) { return this.manageGet(args); } else if (args[1].equals("remove")) { return this.manageRemove(args); } else if (args[1].equals("skipunsentmessages")) { return this.skipUnsentMessages(args); } else if (args[1].toLowerCase().equals("databaserule")) { if (args.length < 3) return SMSCOAMMessages.INVALID_COMMAND; String rasCmd = args[2]; if (rasCmd == null) { return SMSCOAMMessages.INVALID_COMMAND; } SmsRoutingRule smsRoutingRule = this.smscManagement.getSmsRoutingRule(); if (!(smsRoutingRule instanceof DatabaseSmsRoutingRule)) { return SMSCOAMMessages.NO_DATABASE_SMS_ROUTING_RULE; } if (rasCmd.equals("update")) { return this.databaseRuleUpdate(args); } else if (rasCmd.equals("delete")) { return this.databaseRuleDelete(args); } else if (rasCmd.equals("get")) { return this.databaseRuleGet(args); } else if (rasCmd.toLowerCase().equals("getrange")) { return this.databaseRuleGetRange(args); } return SMSCOAMMessages.INVALID_COMMAND; } else if (args[1].equals("archive")) { if (args.length < 3) return SMSCOAMMessages.INVALID_COMMAND; String rasCmd = args[2]; if (rasCmd == null) { return SMSCOAMMessages.INVALID_COMMAND; } if (rasCmd.equals("generatecdr")) { return this.archiveGenerateCdr(args); } return SMSCOAMMessages.INVALID_COMMAND; } else if (args[1].toLowerCase().equals("mapcache")) { if (args.length < 3) return SMSCOAMMessages.INVALID_COMMAND; String rasCmd = args[2]; if (rasCmd == null) { return SMSCOAMMessages.INVALID_COMMAND; } if (rasCmd.equals("get")) { return this.getMapVersionCache(args); } else if (rasCmd.equals("set")) { return this.setMapVersionCache(args); } else if (rasCmd.equals("clear")) { return this.clearMapVersionCache(args); } return SMSCOAMMessages.INVALID_COMMAND; } else if (args[1].toLowerCase().equals("stat")) { if (args.length < 3) return SMSCOAMMessages.INVALID_COMMAND; String rasCmd = args[2]; if (rasCmd == null) { return SMSCOAMMessages.INVALID_COMMAND; } if (rasCmd.equals("get")) { return this.getStat(args); } return SMSCOAMMessages.INVALID_COMMAND; } else if (args[1].toLowerCase().equals("updateccmccmnstable")) { return this.updateCcMccmnstable(args); } else if (args[1].toLowerCase().equals("hrccmccmnc")) { return this.ccMccmnsValueUpdate(args); } return SMSCOAMMessages.INVALID_COMMAND; } catch (Throwable e) { logger.error(String.format("Error while executing comand %s", Arrays.toString(args)), e); return e.toString(); } } /** * smsc mapcache get <msisdn> * * msisdn is optional * * @param args * @return */ private String getMapVersionCache(String[] args) throws Exception { if (args.length < 3 || args.length > 4) { return SMSCOAMMessages.INVALID_COMMAND; } if (args.length == 4) { String msisdn = args[3]; MAPApplicationContextVersion mapApplicationContextVersion = mapVersionCache .getMAPApplicationContextVersion(msisdn); if (mapApplicationContextVersion != null) { return mapApplicationContextVersion.toString(); } else { return SMSCOAMMessages.MAP_VERSION_CACHE_NOT_FOUND; } } FastMap<String, MapVersionNeg> cache = mapVersionCache.getMAPApplicationContextVersionCache(); if (cache.size() == 0) { return SMSCOAMMessages.MAP_VERSION_CACHE_NOT_FOUND; } StringBuffer sb = new StringBuffer(); for (FastMap.Entry<String, MapVersionNeg> e = cache.head(), end = cache.tail(); (e = e.getNext()) != end;) { sb.append(e.getKey()).append(MAP_CACHE_KEY_VALUE_SEPARATOR).append(e.getValue().getCurVersion()).append(LINE_SEPARATOR); } return sb.toString(); } /** * smsc mapcache clear * * msisdn is optional * * @param args * @return */ private String clearMapVersionCache(String[] args) throws Exception { if (args.length != 3) { return SMSCOAMMessages.INVALID_COMMAND; } mapVersionCache.forceClear(); return SMSCOAMMessages.MAP_VERSION_CACHE_SUCCESSFULLY_CLEARED; } /** * smsc mapcache set <msisdn> <version> * * msisdn is optional * * @param args * @return */ private String setMapVersionCache(String[] args) throws Exception { if (args.length != 5) { return SMSCOAMMessages.INVALID_COMMAND; } String msisdn = args[3]; String version = args[4]; MAPApplicationContextVersion mapApplicationContextVersion = MAPApplicationContextVersion.getInstance(Long .parseLong(version)); if (mapApplicationContextVersion == null || mapApplicationContextVersion == MAPApplicationContextVersion.version4) { return SMSCOAMMessages.MAP_VERSION_CACHE_INVALID_VERSION; } mapVersionCache.forceMAPApplicationContextVersion(msisdn, mapApplicationContextVersion); return SMSCOAMMessages.MAP_VERSION_CACHE_SUCCESSFULLY_SET; } private String manageSet(String[] options) throws Exception { if (options.length < 4) { return SMSCOAMMessages.INVALID_COMMAND; } String parName = options[2].toLowerCase(); try { if (parName.equals("scgt")) { String gt = options[3]; if (options.length >= 6 && options[4].equals("networkid")) { int val = Integer.parseInt(options[5]); smscPropertiesManagement.setServiceCenterGt(val, gt); } else { smscPropertiesManagement.setServiceCenterGt(gt); } } else if (parName.equals("scssn")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setServiceCenterSsn(val); } else if (parName.equals("hlrssn")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setHlrSsn(val); } else if (parName.equals("mscssn")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setMscSsn(val); } else if (parName.equals("maxmapv")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setMaxMapVersion(val); } else if (parName.equals("gti")) { String val = options[3]; switch (val) { case "0001": smscPropertiesManagement .setGlobalTitleIndicator(GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_NATURE_OF_ADDRESS_INDICATOR_ONLY); break; case "0010": smscPropertiesManagement .setGlobalTitleIndicator(GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_ONLY); break; case "0011": smscPropertiesManagement .setGlobalTitleIndicator(GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_AND_ENCODING_SCHEME); break; case "0100": smscPropertiesManagement .setGlobalTitleIndicator(GlobalTitleIndicator.GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS); break; default: return SMSCOAMMessages.GLOBAL_TYTLE_INDICATOR_BAD_VALUES; } } else if (parName.equals("tt")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setTranslationType(val); } else if (parName.equals("defaultvalidityperiodhours")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setDefaultValidityPeriodHours(val); } else if (parName.equals("maxvalidityperiodhours")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setMaxValidityPeriodHours(val); } else if (parName.equals("defaultton")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setDefaultTon(val); } else if (parName.equals("defaultnpi")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setDefaultNpi(val); } else if (parName.equals("subscriberbusyduedelay")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setSubscriberBusyDueDelay(val); } else if (parName.equals("firstduedelay")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setFirstDueDelay(val); } else if (parName.equals("secondduedelay")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setSecondDueDelay(val); } else if (parName.equals("maxduedelay")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setMaxDueDelay(val); } else if (parName.equals("duedelaymultiplicator")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setDueDelayMultiplicator(val); } else if (parName.equals("maxmessagelengthreducer")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setMaxMessageLengthReducer(val); } else if (parName.equals("smppencodingforgsm7")) { String s1 = options[3].toLowerCase(); if (s1.equals("utf8")) { smscPropertiesManagement.setSmppEncodingForGsm7(SmppEncoding.Utf8); } else if (s1.equals("unicode")) { smscPropertiesManagement.setSmppEncodingForGsm7(SmppEncoding.Unicode); } else if (s1.equals("gsm7")) { smscPropertiesManagement.setSmppEncodingForGsm7(SmppEncoding.Gsm7); } else { return String.format(SMSCOAMMessages.ILLEGAL_ARGUMENT, "SmppEncodingForGsm7 value", "UTF8 or UNICODE or GSM7 are possible"); } } else if (parName.equals("smppencodingforucs2")) { String s1 = options[3].toLowerCase(); if (s1.equals("utf8")) { smscPropertiesManagement.setSmppEncodingForUCS2(SmppEncoding.Utf8); } else if (s1.equals("unicode")) { smscPropertiesManagement.setSmppEncodingForUCS2(SmppEncoding.Unicode); } else if (s1.equals("gsm7")) { smscPropertiesManagement.setSmppEncodingForUCS2(SmppEncoding.Gsm7); } else { return String.format(SMSCOAMMessages.ILLEGAL_ARGUMENT, "SmppEncodingForUCS2 value", "UTF8 or UNICODE or GSM7 are possible"); } } else if (parName.equals("dbhosts")) { String val = options[3]; smscPropertiesManagement.setDbHosts(val); } else if (parName.equals("dbport")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setDbPort(val); } else if (parName.equals("keyspacename")) { String val = options[3]; smscPropertiesManagement.setKeyspaceName(val); } else if (parName.equals("clustername")) { String val = options[3]; smscPropertiesManagement.setClusterName(val); } else if (parName.equals("fetchperiod")) { long val = Long.parseLong(options[3]); smscPropertiesManagement.setFetchPeriod(val); } else if (parName.equals("fetchmaxrows")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setFetchMaxRows(val); } else if (parName.equals("maxactivitycount")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setMaxActivityCount(val); } else if (parName.equals("deliverytimeout")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setDeliveryTimeout(val); } else if (parName.equals("vpprolong")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setVpProlong(val); } else if (parName.equals("esmedefaultcluster")) { smscPropertiesManagement.setEsmeDefaultClusterName(options[3]); } else if (parName.equals("correlationidlivetime")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setCorrelationIdLiveTime(val); } else if (parName.equals("sriresponselivetime")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setSriResponseLiveTime(val); } else if (parName.equals("revisesecondsonsmscstart")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setReviseSecondsOnSmscStart(val); } else if (parName.equals("processingsmssettimeout")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setProcessingSmsSetTimeout(val); } else if (parName.equals("generatereceiptcdr")) { smscPropertiesManagement.setGenerateReceiptCdr(Boolean.parseBoolean(options[3])); } else if (parName.equals("generatetempfailurecdr")) { smscPropertiesManagement.setGenerateTempFailureCdr(Boolean.parseBoolean(options[3])); } else if (parName.equals("calculatemsgpartslencdr")) { smscPropertiesManagement.setCalculateMsgPartsLenCdr(Boolean.parseBoolean(options[3])); } else if (parName.equals("delayparametersincdr")) { smscPropertiesManagement.setDelayParametersInCdr(Boolean.parseBoolean(options[3])); } else if (parName.equals("receiptsdisabling")) { smscPropertiesManagement.setReceiptsDisabling(Boolean.parseBoolean(options[3])); } else if (parName.equals("enableintermediatereceipts")) { smscPropertiesManagement.setEnableIntermediateReceipts(Boolean.parseBoolean(options[3])); } else if (parName.equals("enableintermediatereceipts")) { smscPropertiesManagement.setEnableIntermediateReceipts(Boolean.parseBoolean(options[3])); } else if (parName.equals("incomereceiptsprocessing")) { smscPropertiesManagement.setIncomeReceiptsProcessing(Boolean.parseBoolean(options[3])); } else if (parName.equals("orignetworkidforreceipts")) { smscPropertiesManagement.setOrigNetworkIdForReceipts(Boolean.parseBoolean(options[3])); } else if (parName.equals("generatecdr")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setGenerateCdrInt(val); } else if (parName.equals("generatearchivetable")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setGenerateArchiveTableInt(val); } else if (parName.equals("storeandforwordmode")) { smscPropertiesManagement.setStoreAndForwordMode(Enum.valueOf(StoreAndForwordMode.class, options[3])); } else if (parName.equals("mocharging")) { smscPropertiesManagement.setMoCharging(Enum.valueOf(MoChargingType.class, options[3])); } else if (parName.equals("hrcharging")) { smscPropertiesManagement.setHrCharging(Enum.valueOf(MoChargingType.class, options[3])); } else if (parName.equals("txsmppcharging")) { smscPropertiesManagement.setTxSmppChargingType(Enum.valueOf(ChargingType.class, options[3])); } else if (parName.equals("txsipcharging")) { smscPropertiesManagement.setTxSipChargingType(Enum.valueOf(ChargingType.class, options[3])); } else if (parName.equals("txhttpcharging")) { MoChargingType val = Enum.valueOf(MoChargingType.class, options[3]); if (val != MoChargingType.diameter) smscPropertiesManagement.setTxHttpCharging(val); } else if (parName.equals("diameterdestrealm")) { String val = options[3]; smscPropertiesManagement.setDiameterDestRealm(val); } else if (parName.equals("diameterdesthost")) { String val = options[3]; smscPropertiesManagement.setDiameterDestHost(val); } else if (parName.equals("diameterdestport")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setDiameterDestPort(val); } else if (parName.equals("diameterusername")) { String val = options[3]; smscPropertiesManagement.setDiameterUserName(val); } else if (parName.equals("removinglivetablesdays")) { int val = Integer.parseInt(options[3]); if (val == 1 || val == 2 || val < 0) return SMSCOAMMessages.REMOVING_LIVE_ARCHIVE_TABLES_DAYS_BAD_VALUES; smscPropertiesManagement.setRemovingLiveTablesDays(val); } else if (parName.equals("removingarchivetablesdays")) { int val = Integer.parseInt(options[3]); if (val == 1 || val == 2 || val < 0) return SMSCOAMMessages.REMOVING_LIVE_ARCHIVE_TABLES_DAYS_BAD_VALUES; smscPropertiesManagement.setRemovingArchiveTablesDays(val); } else if (parName.equals("hrhlrnumber")) { String hrhlrnumber = options[3]; if (options.length >= 6 && options[4].equals("networkid")) { int val = Integer.parseInt(options[5]); smscPropertiesManagement.setHrHlrNumber(val, hrhlrnumber); } else { smscPropertiesManagement.setHrHlrNumber(hrhlrnumber); } } else if (parName.equals("hrsribypass")) { boolean hrsribypass = Boolean.parseBoolean(options[3]); if (options.length >= 6 && options[4].equals("networkid")) { int val = Integer.parseInt(options[5]); smscPropertiesManagement.setHrSriBypass(val, hrsribypass); } else { smscPropertiesManagement.setHrSriBypass(hrsribypass); } } else if (parName.equals("nationallanguagesingleshift")) { int val = Integer.parseInt(options[3]); if (val < 0 || val > 13) return SMSCOAMMessages.NATIONAL_LANGUAGE_SHIFT_BAD_VALUE; smscPropertiesManagement.setNationalLanguageSingleShift(val); } else if (parName.equals("nationallanguagelockingshift")) { int val = Integer.parseInt(options[3]); if (val < 0 || val > 13) return SMSCOAMMessages.NATIONAL_LANGUAGE_SHIFT_BAD_VALUE; smscPropertiesManagement.setNationalLanguageLockingShift(val); } else if (parName.equals("httpdefaultsourceton")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setHttpDefaultSourceTon(val); } else if (parName.equals("httpDefaultSourceNpi")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setHttpDefaultSourceNpi(val); } else if (parName.equals("httpdefaultdestton")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setHttpDefaultDestTon(val); } else if (parName.equals("httpdefaultdestnpi")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setHttpDefaultDestNpi(val); } else if (parName.equals("httpdefaultnetworkid")) { int val = Integer.parseInt(options[3]); smscPropertiesManagement.setHttpDefaultNetworkId(val); } else if (parName.equals("httpdefaultmessagingmode")) { int val = Integer.parseInt(options[3]); if (val < 0 || val > 3) return SMSCOAMMessages.MESSAGING_MODE_BAD_VALUES; smscPropertiesManagement.setHttpDefaultMessagingMode(val); } else if (parName.equals("modefaultmessagingmode")) { int val = Integer.parseInt(options[3]); if (val < 0 || val > 3) return SMSCOAMMessages.MESSAGING_MODE_BAD_VALUES; smscPropertiesManagement.setMoDefaultMessagingMode(val); } else if (parName.equals("hrdefaultmessagingmode")) { int val = Integer.parseInt(options[3]); if (val < 0 || val > 3) return SMSCOAMMessages.MESSAGING_MODE_BAD_VALUES; smscPropertiesManagement.setHrDefaultMessagingMode(val); } else if (parName.equals("sipdefaultmessagingmode")) { int val = Integer.parseInt(options[3]); if (val < 0 || val > 3 || val == 2) return SMSCOAMMessages.MESSAGING_MODE_BAD_VALUES; smscPropertiesManagement.setSipDefaultMessagingMode(val); } else if (parName.equals("httpdefaultrddeliveryreceipt")) { int val = Integer.parseInt(options[3]); if (val < 0 || val > 3 || val == 2) return SMSCOAMMessages.DELIVERY_RECEIPT_BAD_VALUES; smscPropertiesManagement.setHttpDefaultRDDeliveryReceipt(val); } else if (parName.equals("httpdefaultrdintermediatenotification")) { int val = Integer.parseInt(options[3]); if (val < 0 || val > 1) return SMSCOAMMessages.INTERMEDIATE_RECEIPT_BAD_VALUES; smscPropertiesManagement.setHttpDefaultRDIntermediateNotification(val); } else if (parName.equals("httpdefaultdatacoding")) { int val = Integer.parseInt(options[3]); if (val < 0 || val > 255) return SMSCOAMMessages.DATA_CODING_BAD_VALUES; smscPropertiesManagement.setHttpDefaultDataCoding(val); } else if (parName.equals("httpencodingforgsm7")) { String s1 = options[3].toLowerCase(); if (s1.equals("utf8")) { smscPropertiesManagement.setHttpEncodingForGsm7(HttpEncoding.Utf8); } else if (s1.equals("unicode")) { smscPropertiesManagement.setHttpEncodingForGsm7(HttpEncoding.Unicode); } else { return String.format(SMSCOAMMessages.ILLEGAL_ARGUMENT, "HttpEncodingForGsm7 value", "UTF8 or UNICODE are possible"); } } else if (parName.equals("httpencodingforucs2")) { String s1 = options[3].toLowerCase(); if (s1.equals("utf8")) { smscPropertiesManagement.setHttpEncodingForUCS2(HttpEncoding.Utf8); } else if (s1.equals("unicode")) { smscPropertiesManagement.setHttpEncodingForUCS2(HttpEncoding.Unicode); } else { return String.format(SMSCOAMMessages.ILLEGAL_ARGUMENT, "HttpEncodingForUCS2 value", "UTF8 or UNICODE are possible"); } } else if (parName.equals("minmessageid")) { long val = Long.parseLong(options[3]); smscPropertiesManagement.setMinMessageId(val); } else if (parName.equals("maxmessageid")) { long val = Long.parseLong(options[3]); smscPropertiesManagement.setMaxMessageId(val); } else if (parName.equals("deliverypause")) { boolean val = Boolean.parseBoolean(options[3]); smscPropertiesManagement.setDeliveryPause(val); } else if (parName.equals("cassandrauser")) { String val = String.valueOf(options[3]); smscPropertiesManagement.setCassandraUser(val); } else if (parName.equals("cassandrapass")) { String val = String.valueOf(options[3]); smscPropertiesManagement.setCassandraPass(val); } else { return SMSCOAMMessages.INVALID_COMMAND; } } catch (IllegalArgumentException e) { return String.format(SMSCOAMMessages.ILLEGAL_ARGUMENT, parName, e.getMessage()); } return SMSCOAMMessages.PARAMETER_SUCCESSFULLY_SET; } private String manageRemove(String[] options) throws Exception { if (options.length < 3) { return SMSCOAMMessages.INVALID_COMMAND; } String parName = options[2].toLowerCase(); try { if (parName.equals("esmedefaultcluster")) { smscPropertiesManagement.setEsmeDefaultClusterName(null); } else if (parName.equals("hrhlrnumber")) { if (options.length >= 5 && options[3].equals("networkid")) { int val = Integer.parseInt(options[4]); smscPropertiesManagement.setHrHlrNumber(val, null); } else { smscPropertiesManagement.setHrHlrNumber(null); } } else if (parName.equals("hrsribypass")) { if (options.length >= 5 && options[3].equals("networkid")) { int val = Integer.parseInt(options[4]); smscPropertiesManagement.removeHrSriBypassForNetworkId(val); } else { smscPropertiesManagement.removeHrSriBypassForNetworkId(0); } } else { return SMSCOAMMessages.INVALID_COMMAND; } } catch (IllegalArgumentException e) { return String.format(SMSCOAMMessages.ILLEGAL_ARGUMENT, parName, e.getMessage()); } return SMSCOAMMessages.PARAMETER_SUCCESSFULLY_REMOVED; } private String skipUnsentMessages(String[] options) throws Exception { if (options.length < 3) { return SMSCOAMMessages.INVALID_COMMAND; } int val = Integer.parseInt(options[2]); try { if (val >= 0) { smscPropertiesManagement.setSkipUnsentMessages(val); } else { return SMSCOAMMessages.SKIP_UNSENT_MESSAGES_NEGATIVE_VALUE; } } catch (IllegalArgumentException e) { return String.format(SMSCOAMMessages.ILLEGAL_ARGUMENT, options[2], e.getMessage()); } String s = (new Date(new Date().getTime() - val * 1000 - 10000)).toString(); return String.format(SMSCOAMMessages.SKIP_UNSENT_MESSAGES_ACCEPTED_VALUE, s); } 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("scgt")) { sb.append("networkId=0 - GT="); sb.append(smscPropertiesManagement.getServiceCenterGt()); for (Integer key : smscPropertiesManagement.getNetworkIdVsServiceCenterGt().keySet()) { sb.append("\nnetworkId="); sb.append(key); sb.append(" - GT="); sb.append(smscPropertiesManagement.getNetworkIdVsServiceCenterGt().get(key)); } } else if (parName.equals("scssn")) { sb.append(smscPropertiesManagement.getServiceCenterSsn()); } else if (parName.equals("hlrssn")) { sb.append(smscPropertiesManagement.getHlrSsn()); } else if (parName.equals("mscssn")) { sb.append(smscPropertiesManagement.getMscSsn()); } else if (parName.equals("maxmapv")) { sb.append(smscPropertiesManagement.getMaxMapVersion()); } else if (parName.equals("gti")) { switch (smscPropertiesManagement.getGlobalTitleIndicator()) { case GLOBAL_TITLE_INCLUDES_NATURE_OF_ADDRESS_INDICATOR_ONLY: sb.append("0001"); break; case GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_ONLY: sb.append("0010"); break; case GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_AND_ENCODING_SCHEME: sb.append("0011"); break; case GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS: sb.append("0100"); break; } } else if (parName.equals("tt")) { sb.append(smscPropertiesManagement.getTranslationType()); } else if (parName.equals("defaultvalidityperiodhours")) { sb.append(smscPropertiesManagement.getDefaultValidityPeriodHours()); } else if (parName.equals("maxvalidityperiodhours")) { sb.append(smscPropertiesManagement.getMaxValidityPeriodHours()); } else if (parName.equals("defaultton")) { sb.append(smscPropertiesManagement.getDefaultTon()); } else if (parName.equals("defaultnpi")) { sb.append(smscPropertiesManagement.getDefaultNpi()); } else if (parName.equals("subscriberbusyduedelay")) { sb.append(smscPropertiesManagement.getSubscriberBusyDueDelay()); } else if (parName.equals("firstduedelay")) { sb.append(smscPropertiesManagement.getFirstDueDelay()); } else if (parName.equals("secondduedelay")) { sb.append(smscPropertiesManagement.getSecondDueDelay()); } else if (parName.equals("maxduedelay")) { sb.append(smscPropertiesManagement.getMaxDueDelay()); } else if (parName.equals("duedelaymultiplicator")) { sb.append(smscPropertiesManagement.getDueDelayMultiplicator()); } else if (parName.equals("maxmessagelengthreducer")) { sb.append(smscPropertiesManagement.getMaxMessageLengthReducer()); } else if (parName.equals("smppencodingforgsm7")) { sb.append(smscPropertiesManagement.getSmppEncodingForGsm7()); } else if (parName.equals("smppencodingforucs2")) { sb.append(smscPropertiesManagement.getSmppEncodingForUCS2()); } else if (parName.equals("dbhosts")) { sb.append(smscPropertiesManagement.getDbHosts()); } else if (parName.equals("dbport")) { sb.append(smscPropertiesManagement.getDbPort()); } else if (parName.equals("keyspacename")) { sb.append(smscPropertiesManagement.getKeyspaceName()); } else if (parName.equals("clustername")) { sb.append(smscPropertiesManagement.getClusterName()); } else if (parName.equals("fetchperiod")) { sb.append(smscPropertiesManagement.getFetchPeriod()); } else if (parName.equals("fetchmaxrows")) { sb.append(smscPropertiesManagement.getFetchMaxRows()); } else if (parName.equals("maxactivitycount")) { sb.append(smscPropertiesManagement.getMaxActivityCount()); } else if (parName.equals("deliverytimeout")) { sb.append(smscPropertiesManagement.getDeliveryTimeout()); } else if (parName.equals("vpprolong")) { sb.append(smscPropertiesManagement.getVpProlong()); } else if (parName.equals("esmedefaultcluster")) { sb.append(smscPropertiesManagement.getEsmeDefaultClusterName()); } else if (parName.equals("correlationidlivetime")) { sb.append(smscPropertiesManagement.getCorrelationIdLiveTime()); } else if (parName.equals("sriresponselivetime")) { sb.append(smscPropertiesManagement.getSriResponseLiveTime()); } else if (parName.equals("revisesecondsonsmscstart")) { sb.append(smscPropertiesManagement.getReviseSecondsOnSmscStart()); } else if (parName.equals("processingsmssettimeout")) { sb.append(smscPropertiesManagement.getProcessingSmsSetTimeout()); } else if (parName.equals("generatereceiptcdr")) { sb.append(smscPropertiesManagement.getGenerateReceiptCdr()); } else if (parName.equals("generatetempfailurecdr")) { sb.append(smscPropertiesManagement.getGenerateTempFailureCdr()); } else if (parName.equals("calculatemsgpartslencdr")) { sb.append(smscPropertiesManagement.getCalculateMsgPartsLenCdr()); } else if (parName.equals("delayparametersincdr")) { sb.append(smscPropertiesManagement.getDelayParametersInCdr()); } else if (parName.equals("receiptsdisabling")) { sb.append(smscPropertiesManagement.getReceiptsDisabling()); } else if (parName.equals("enableintermediatereceipts")) { sb.append(smscPropertiesManagement.getEnableIntermediateReceipts()); } else if (parName.equals("orignetworkidforreceipts")) { sb.append(smscPropertiesManagement.getOrigNetworkIdForReceipts()); } else if (parName.equals("incomereceiptsprocessing")) { sb.append(smscPropertiesManagement.getIncomeReceiptsProcessing()); } else if (parName.equals("generatearchivetable")) { sb.append(smscPropertiesManagement.getGenerateArchiveTable().getValue()); } else if (parName.equals("storeandforwordmode")) { sb.append(smscPropertiesManagement.getStoreAndForwordMode()); } else if (parName.equals("mocharging")) { sb.append(smscPropertiesManagement.getMoCharging()); } else if (parName.equals("hrcharging")) { sb.append(smscPropertiesManagement.getHrCharging()); } else if (parName.equals("txsmppcharging")) { sb.append(smscPropertiesManagement.getTxSmppChargingType()); } else if (parName.equals("txsipcharging")) { sb.append(smscPropertiesManagement.getTxSipChargingType()); } else if (parName.equals("txhttpcharging")) { sb.append(smscPropertiesManagement.getTxHttpCharging()); } else if (parName.equals("diameterdestrealm")) { sb.append(smscPropertiesManagement.getDiameterDestRealm()); } else if (parName.equals("diameterdesthost")) { sb.append(smscPropertiesManagement.getDiameterDestHost()); } else if (parName.equals("diameterdestport")) { sb.append(smscPropertiesManagement.getDiameterDestPort()); } else if (parName.equals("diameterusername")) { sb.append(smscPropertiesManagement.getDiameterUserName()); } else if (parName.equals("removinglivetablesdays")) { sb.append(smscPropertiesManagement.getRemovingLiveTablesDays()); } else if (parName.equals("removingarchivetablesdays")) { sb.append(smscPropertiesManagement.getRemovingArchiveTablesDays()); } else if (parName.equals("hrhlrnumber")) { sb.append("networkId=0 - hrhlrnumber="); sb.append(smscPropertiesManagement.getHrHlrNumber()); for (Integer key : smscPropertiesManagement.getNetworkIdVsHrHlrNumber().keySet()) { sb.append("\nnetworkId="); sb.append(key); sb.append(" - hrhlrnumber="); sb.append(smscPropertiesManagement.getNetworkIdVsHrHlrNumber().get(key)); } } else if (parName.equals("hrsribypass")) { sb.append("networkId=0 - hrsribypass="); sb.append(smscPropertiesManagement.getHrSriBypass()); for (Integer key : smscPropertiesManagement.getNetworkIdVsHrSriBypass().keySet()) { sb.append("\nnetworkId="); sb.append(key); sb.append(" - hrsribypass="); sb.append(smscPropertiesManagement.getNetworkIdVsHrSriBypass().get(key)); } } else if (parName.equals("nationallanguagesingleshift")) { sb.append(smscPropertiesManagement.getNationalLanguageSingleShift()); } else if (parName.equals("nationallanguagelockingshift")) { sb.append(smscPropertiesManagement.getNationalLanguageLockingShift()); } else if (parName.equals("httpdefaultsourceton")) { sb.append(smscPropertiesManagement.getHttpDefaultSourceTon()); } else if (parName.equals("httpdefaultsourcenpi")) { sb.append(smscPropertiesManagement.getHttpDefaultSourceNpi()); } else if (parName.equals("httpdefaultdestton")) { sb.append(smscPropertiesManagement.getHttpDefaultDestTon()); } else if (parName.equals("httpdefaultdestnpi")) { sb.append(smscPropertiesManagement.getHttpDefaultDestNpi()); } else if (parName.equals("httpdefaultnetworkid")) { sb.append(smscPropertiesManagement.getHttpDefaultNetworkId()); } else if (parName.equals("httpdefaultmessagingmode")) { sb.append(smscPropertiesManagement.getHttpDefaultMessagingMode()); } else if (parName.equals("modefaultmessagingmode")) { sb.append(smscPropertiesManagement.getMoDefaultMessagingMode()); } else if (parName.equals("hrdefaultmessagingmode")) { sb.append(smscPropertiesManagement.getHrDefaultMessagingMode()); } else if (parName.equals("sipdefaultmessagingmode")) { sb.append(smscPropertiesManagement.getSipDefaultMessagingMode()); } else if (parName.equals("httpdefaultrddeliveryreceipt")) { sb.append(smscPropertiesManagement.getHttpDefaultRDDeliveryReceipt()); } else if (parName.equals("httpdefaultrdintermediatenotification")) { sb.append(smscPropertiesManagement.getHttpDefaultRDIntermediateNotification()); } else if (parName.equals("httpdefaultdatacoding")) { sb.append(smscPropertiesManagement.getHttpDefaultDataCoding()); } else if (parName.equals("httpencodingforgsm7")) { sb.append(smscPropertiesManagement.getHttpEncodingForGsm7()); } else if (parName.equals("httpencodingforucs2")) { sb.append(smscPropertiesManagement.getHttpEncodingForUCS2()); } else if (parName.equals("minmessageid")) { sb.append(smscPropertiesManagement.getMinMessageId()); } else if (parName.equals("maxmessageid")) { sb.append(smscPropertiesManagement.getMaxMessageId()); } else if (parName.equals("deliverypause")) { sb.append(smscPropertiesManagement.isDeliveryPause()); } else if (parName.equals("cassandrauser")) { sb.append(smscPropertiesManagement.getCassandraUser()); } else if (parName.equals("cassandrapass")) { sb.append(smscPropertiesManagement.getCassandraPass()); } else { return SMSCOAMMessages.INVALID_COMMAND; } return sb.toString(); } else { StringBuilder sb = new StringBuilder(); sb.append("scgt : "); sb.append("networkId=0 - GT="); sb.append(smscPropertiesManagement.getServiceCenterGt()); for (Integer key : smscPropertiesManagement.getNetworkIdVsServiceCenterGt().keySet()) { if (key != null) { sb.append("\nnetworkId="); sb.append(key); sb.append(" - GT="); sb.append(smscPropertiesManagement.getNetworkIdVsServiceCenterGt().get(key)); } } sb.append("\n"); sb.append("scssn = "); sb.append(smscPropertiesManagement.getServiceCenterSsn()); sb.append("\n"); sb.append("hlrssn = "); sb.append(smscPropertiesManagement.getHlrSsn()); sb.append("\n"); sb.append("mscssn = "); sb.append(smscPropertiesManagement.getMscSsn()); sb.append("\n"); sb.append("maxmapv = "); sb.append(smscPropertiesManagement.getMaxMapVersion()); sb.append("\n"); sb.append("gti = "); switch (smscPropertiesManagement.getGlobalTitleIndicator()) { case GLOBAL_TITLE_INCLUDES_NATURE_OF_ADDRESS_INDICATOR_ONLY: sb.append("0001"); break; case GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_ONLY: sb.append("0010"); break; case GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_AND_ENCODING_SCHEME: sb.append("0011"); break; case GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS: sb.append("0100"); break; } sb.append("\n"); sb.append("tt = "); sb.append(smscPropertiesManagement.getTranslationType()); sb.append("\n"); sb.append("defaultvalidityperiodhours = "); sb.append(smscPropertiesManagement.getDefaultValidityPeriodHours()); sb.append("\n"); sb.append("maxvalidityperiodhours = "); sb.append(smscPropertiesManagement.getMaxValidityPeriodHours()); sb.append("\n"); sb.append("defaultton = "); sb.append(smscPropertiesManagement.getDefaultTon()); sb.append("\n"); sb.append("defaultnpi = "); sb.append(smscPropertiesManagement.getDefaultNpi()); sb.append("\n"); sb.append("subscriberbusyduedelay = "); sb.append(smscPropertiesManagement.getSubscriberBusyDueDelay()); sb.append("\n"); sb.append("firstduedelay = "); sb.append(smscPropertiesManagement.getFirstDueDelay()); sb.append("\n"); sb.append("secondduedelay = "); sb.append(smscPropertiesManagement.getSecondDueDelay()); sb.append("\n"); sb.append("maxduedelay = "); sb.append(smscPropertiesManagement.getMaxDueDelay()); sb.append("\n"); sb.append("duedelaymultiplicator = "); sb.append(smscPropertiesManagement.getDueDelayMultiplicator()); sb.append("\n"); sb.append("maxmessagelengthreducer = "); sb.append(smscPropertiesManagement.getMaxMessageLengthReducer()); sb.append("\n"); sb.append("smppencodingforgsm7 = "); sb.append(smscPropertiesManagement.getSmppEncodingForGsm7()); sb.append("\n"); sb.append("smppencodingforucs2 = "); sb.append(smscPropertiesManagement.getSmppEncodingForUCS2()); sb.append("\n"); // sb.append("hosts = "); // sb.append(smscPropertiesManagement.getHosts()); // sb.append("\n"); sb.append("dbhosts = "); sb.append(smscPropertiesManagement.getDbHosts()); sb.append("\n"); sb.append("dbport = "); sb.append(smscPropertiesManagement.getDbPort()); sb.append("\n"); sb.append("keyspaceName = "); sb.append(smscPropertiesManagement.getKeyspaceName()); sb.append("\n"); sb.append("clustername = "); sb.append(smscPropertiesManagement.getClusterName()); sb.append("\n"); sb.append("fetchperiod = "); sb.append(smscPropertiesManagement.getFetchPeriod()); sb.append("\n"); sb.append("fetchmaxrows = "); sb.append(smscPropertiesManagement.getFetchMaxRows()); sb.append("\n"); sb.append("maxactivitycount = "); sb.append(smscPropertiesManagement.getMaxActivityCount()); sb.append("\n"); sb.append("deliverytimeout = "); sb.append(smscPropertiesManagement.getDeliveryTimeout()); sb.append("\n"); sb.append("vpprolong = "); sb.append(smscPropertiesManagement.getVpProlong()); sb.append("\n"); // sb.append("cdrDatabaseExportDuration = "); // sb.append(smscPropertiesManagement.getCdrDatabaseExportDuration()); // sb.append("\n"); sb.append("esmedefaultcluster = "); sb.append(smscPropertiesManagement.getEsmeDefaultClusterName()); sb.append("\n"); // sb.append("smshomerouting = "); // sb.append(smscPropertiesManagement.getSMSHomeRouting()); // sb.append("\n"); sb.append("correlationidlivetime = "); sb.append(smscPropertiesManagement.getCorrelationIdLiveTime()); sb.append("\n"); sb.append("sriresponselivetime = "); sb.append(smscPropertiesManagement.getSriResponseLiveTime()); sb.append("\n"); sb.append("revisesecondsonsmscstart = "); sb.append(smscPropertiesManagement.getReviseSecondsOnSmscStart()); sb.append("\n"); sb.append("processingsmssettimeout = "); sb.append(smscPropertiesManagement.getProcessingSmsSetTimeout()); sb.append("\n"); sb.append("generatereceiptcdr = "); sb.append(smscPropertiesManagement.getGenerateReceiptCdr()); sb.append("\n"); sb.append("generatetempfailurecdr = "); sb.append(smscPropertiesManagement.getGenerateTempFailureCdr()); sb.append("\n"); sb.append("calculatemsgpartslencdr = "); sb.append(smscPropertiesManagement.getCalculateMsgPartsLenCdr()); sb.append("\n"); sb.append("delayparametersincdr = "); sb.append(smscPropertiesManagement.getDelayParametersInCdr()); sb.append("\n"); sb.append("receiptsdisabling = "); sb.append(smscPropertiesManagement.getReceiptsDisabling()); sb.append("\n"); sb.append("enableintermediatereceipts = "); sb.append(smscPropertiesManagement.getEnableIntermediateReceipts()); sb.append("\n"); sb.append("incomereceiptsprocessing = "); sb.append(smscPropertiesManagement.getIncomeReceiptsProcessing()); sb.append("\n"); sb.append("orignetworkidforreceipts = "); sb.append(smscPropertiesManagement.getOrigNetworkIdForReceipts()); sb.append("\n"); sb.append("generatecdr = "); sb.append(smscPropertiesManagement.getGenerateCdr().getValue()); sb.append("\n"); sb.append("generatearchivetable = "); sb.append(smscPropertiesManagement.getGenerateArchiveTable().getValue()); sb.append("\n"); sb.append("storeandforwordmode = "); sb.append(smscPropertiesManagement.getStoreAndForwordMode()); sb.append("\n"); sb.append("mocharging = "); sb.append(smscPropertiesManagement.getMoCharging()); sb.append("\n"); sb.append("hrcharging = "); sb.append(smscPropertiesManagement.getHrCharging()); sb.append("\n"); sb.append("txsmppcharging = "); sb.append(smscPropertiesManagement.getTxSmppChargingType()); sb.append("\n"); sb.append("txsipcharging = "); sb.append(smscPropertiesManagement.getTxSipChargingType()); sb.append("\n"); sb.append("txhttpcharging = "); sb.append(smscPropertiesManagement.getTxHttpCharging()); sb.append("\n"); sb.append("diameterdestrealm = "); sb.append(smscPropertiesManagement.getDiameterDestRealm()); sb.append("\n"); sb.append("diameterdesthost = "); sb.append(smscPropertiesManagement.getDiameterDestHost()); sb.append("\n"); sb.append("diameterdestport = "); sb.append(smscPropertiesManagement.getDiameterDestPort()); sb.append("\n"); sb.append("diameterusername = "); sb.append(smscPropertiesManagement.getDiameterUserName()); sb.append("\n"); sb.append("removinglivetablesdays = "); sb.append(smscPropertiesManagement.getRemovingLiveTablesDays()); sb.append("\n"); sb.append("removingarchivetablesdays = "); sb.append(smscPropertiesManagement.getRemovingArchiveTablesDays()); sb.append("\n"); sb.append("hrhlrnumber : "); sb.append("networkId=0 - hrhlrnumber="); sb.append(smscPropertiesManagement.getHrHlrNumber()); for (Integer key : smscPropertiesManagement.getNetworkIdVsHrHlrNumber().keySet()) { if (key != null) { sb.append("\nnetworkId="); sb.append(key); sb.append(" - hrhlrnumber="); sb.append(smscPropertiesManagement.getNetworkIdVsHrHlrNumber().get(key)); } } sb.append("\n"); sb.append("hrsribypass : "); sb.append("networkId=0 - hrsribypass="); sb.append(smscPropertiesManagement.getHrSriBypass()); for (Integer key : smscPropertiesManagement.getNetworkIdVsHrSriBypass().keySet()) { if (key != null) { sb.append("\nnetworkId="); sb.append(key); sb.append(" - hrsribypass="); sb.append(smscPropertiesManagement.getNetworkIdVsHrSriBypass().get(key)); } } sb.append("\n"); sb.append("nationallanguagesingleshift = "); sb.append(smscPropertiesManagement.getNationalLanguageSingleShift()); sb.append("\n"); sb.append("nationallanguagelockingshift = "); sb.append(smscPropertiesManagement.getNationalLanguageLockingShift()); sb.append("\n"); sb.append("httpdefaultsourceton = "); sb.append(smscPropertiesManagement.getHttpDefaultSourceTon()); sb.append("\n"); sb.append("httpdefaultsourcenpi = "); sb.append(smscPropertiesManagement.getHttpDefaultSourceNpi()); sb.append("\n"); sb.append("httpdefaultdestton = "); sb.append(smscPropertiesManagement.getHttpDefaultDestTon()); sb.append("\n"); sb.append("httpdefaultdestnpi = "); sb.append(smscPropertiesManagement.getHttpDefaultDestNpi()); sb.append("\n"); sb.append("httpdefaultnetworkid = "); sb.append(smscPropertiesManagement.getHttpDefaultNetworkId()); sb.append("\n"); sb.append("httpdefaultmessagingmode = "); sb.append(smscPropertiesManagement.getHttpDefaultMessagingMode()); sb.append("\n"); sb.append("modefaultmessagingmode = "); sb.append(smscPropertiesManagement.getMoDefaultMessagingMode()); sb.append("\n"); sb.append("hrdefaultmessagingmode = "); sb.append(smscPropertiesManagement.getHrDefaultMessagingMode()); sb.append("\n"); sb.append("sipdefaultmessagingmode = "); sb.append(smscPropertiesManagement.getSipDefaultMessagingMode()); sb.append("\n"); sb.append("httpdefaultrddeliveryreceipt = "); sb.append(smscPropertiesManagement.getHttpDefaultRDDeliveryReceipt()); sb.append("\n"); sb.append("httpdefaultrdintermediatenotification = "); sb.append(smscPropertiesManagement.getHttpDefaultRDIntermediateNotification()); sb.append("\n"); sb.append("httpdefaultdatacoding = "); sb.append(smscPropertiesManagement.getHttpDefaultDataCoding()); sb.append("\n"); sb.append("httpencodingforgsm7 = "); sb.append(smscPropertiesManagement.getHttpEncodingForGsm7()); sb.append("\n"); sb.append("httpencodingforucs2 = "); sb.append(smscPropertiesManagement.getHttpEncodingForUCS2()); sb.append("\n"); sb.append("minmessageid = "); sb.append(smscPropertiesManagement.getMinMessageId()); sb.append("\n"); sb.append("maxmessageid = "); sb.append(smscPropertiesManagement.getMaxMessageId()); sb.append("\n"); sb.append("deliverypause = "); sb.append(smscPropertiesManagement.isDeliveryPause()); sb.append("\n"); sb.append("cassandrauser = "); sb.append(smscPropertiesManagement.getCassandraUser()); sb.append("\n"); sb.append("cassandrapass = "); sb.append(smscPropertiesManagement.getCassandraPass()); sb.append("\n"); return sb.toString(); } } /** * smsc databaseRule update <address> <systemId> <SMPP|SIP> networkid <network-id> * * @param args * @return */ private String databaseRuleUpdate(String[] args) throws Exception { DatabaseSmsRoutingRule smsRoutingRule = (DatabaseSmsRoutingRule) this.smscManagement.getSmsRoutingRule(); if (args.length < 5 || args.length > 8) { return SMSCOAMMessages.INVALID_COMMAND; } String address = args[3]; if (address == null) { return SMSCOAMMessages.INVALID_COMMAND; } String systemId = args[4]; if (systemId == null) { return SMSCOAMMessages.INVALID_COMMAND; } int count = 5; String command; SmsRoutingRuleType smsRoutingRuleType = SmsRoutingRuleType.SMPP; int networkId = 0; while (count < args.length && ((command = args[count++]) != null)) { if (command.equals("SMPP") || command.equals("SIP")) { smsRoutingRuleType = SmsRoutingRuleType.valueOf(command); } else if (command.equals("networkid")) { if (count < args.length) { String value = args[count++]; networkId = Integer.parseInt(value); } } }// while smsRoutingRule.updateDbSmsRoutingRule(smsRoutingRuleType, address, networkId, systemId); return String.format(SMSCOAMMessages.UPDATE_DATABASE_RULE_SUCCESSFULL, smsRoutingRuleType.toString(), address, networkId); } /** * smsc databaseRule delete <address> <SMPP|SIP> networkid <network-id> * * @param args * @return */ private String databaseRuleDelete(String[] args) throws Exception { DatabaseSmsRoutingRule smsRoutingRule = (DatabaseSmsRoutingRule) this.smscManagement.getSmsRoutingRule(); if (args.length < 4 || args.length > 7) { return SMSCOAMMessages.INVALID_COMMAND; } String address = args[3]; if (address == null) { return SMSCOAMMessages.INVALID_COMMAND; } int count = 4; String command; SmsRoutingRuleType smsRoutingRuleType = SmsRoutingRuleType.SMPP; int networkId = 0; while (count < args.length && ((command = args[count++]) != null)) { if (command.equals("SMPP") || command.equals("SIP")) { smsRoutingRuleType = SmsRoutingRuleType.valueOf(command); } else if (command.equals("networkid")) { if (count < args.length) { String value = args[count++]; networkId = Integer.parseInt(value); } } }// while smsRoutingRule.deleteDbSmsRoutingRule(smsRoutingRuleType, address, networkId); return String.format(SMSCOAMMessages.DELETE_DATABASE_RULE_SUCCESSFULL, smsRoutingRuleType.toString(), address, networkId); } /** * smsc databaseRule get <address> <SMPP|SIP> networkid <network-id> * * @param args * @return */ private String databaseRuleGet(String[] args) throws Exception { DatabaseSmsRoutingRule smsRoutingRule = (DatabaseSmsRoutingRule) this.smscManagement.getSmsRoutingRule(); if (args.length < 4 || args.length > 7) { return SMSCOAMMessages.INVALID_COMMAND; } String address = args[3]; if (address == null) { return SMSCOAMMessages.INVALID_COMMAND; } int count = 4; String command; SmsRoutingRuleType smsRoutingRuleType = SmsRoutingRuleType.SMPP; int networkId = 0; while (count < args.length && ((command = args[count++]) != null)) { if (command.equals("SMPP") || command.equals("SIP")) { smsRoutingRuleType = SmsRoutingRuleType.valueOf(command); } else if (command.equals("networkid")) { if (count < args.length) { String value = args[count++]; networkId = Integer.parseInt(value); } } }// while DbSmsRoutingRule res = smsRoutingRule.getSmsRoutingRule(smsRoutingRuleType, address, networkId); if (res == null) { return String.format(SMSCOAMMessages.NO_ROUTING_RULE_DEFINED_YET, smsRoutingRuleType.name(), address, networkId); } return res.toString(); } /** * smsc databaseRule getRange <SMPP|SIP> <address> or smsc databaseRule * getRange <SMPP|SIP> * * @param args * @return */ private String databaseRuleGetRange(String[] args) throws Exception { DatabaseSmsRoutingRule smsRoutingRule = (DatabaseSmsRoutingRule) this.smscManagement.getSmsRoutingRule(); if (args.length < 4 || args.length > 5) { return SMSCOAMMessages.INVALID_COMMAND; } SmsRoutingRuleType smsRoutingRuleType = SmsRoutingRuleType.valueOf(args[3]); if (smsRoutingRuleType == null) { return SMSCOAMMessages.INVALID_COMMAND; } String address = null; if (args.length == 5) { address = args[4]; if (address == null) { return SMSCOAMMessages.INVALID_COMMAND; } } List<DbSmsRoutingRule> res = smsRoutingRule.getSmsRoutingRulesRange(smsRoutingRuleType, address); StringBuilder sb = new StringBuilder(); int i1 = 0; for (DbSmsRoutingRule rr : res) { if (i1 == 0) i1 = 1; else sb.append("\n"); sb.append(rr.toString()); } return sb.toString(); } /** * smsc archive generateCdr <timeFrom> <timeTo> * * @param args * @return */ private String archiveGenerateCdr(String[] args) throws Exception { if (args.length < 5 || args.length > 5) { return SMSCOAMMessages.INVALID_COMMAND; } String timeFromS = args[3]; String timeToS = args[4]; if (timeFromS == null || timeToS == null) { return SMSCOAMMessages.INVALID_COMMAND; } SimpleDateFormat df = new SimpleDateFormat(); Date timeFrom = df.parse(timeFromS); if (timeFrom == null) return SMSCOAMMessages.BAD_FORMATTED_FROM_FIELD; Date timeTo = df.parse(timeToS); if (timeTo == null) return SMSCOAMMessages.BAD_FORMATTED_TO_FIELD; ArchiveSms.getInstance().makeCdrDatabaseManualExport(timeFrom, timeTo); return SMSCOAMMessages.ACCEPTED_ARCHIVE_GENERATE_CDR_SUCCESSFULL; } public String getStat(String[] args) { StringBuilder sb = new StringBuilder(); SmscStatProvider smscStatProvider = SmscStatProvider.getInstance(); sb.append("Stat: "); sb.append("Time: "); sb.append(new Date()); sb.append(", MessageInProcess: "); sb.append(smscStatProvider.getMessageInProcess()); sb.append(", MessageId: "); sb.append(smscStatProvider.getCurrentMessageId()); sb.append(", MessageScheduledTotal: "); sb.append(smscStatProvider.getMessageScheduledTotal()); sb.append(", DueSlotProcessingLag: "); sb.append(smscStatProvider.getDueSlotProcessingLag()); sb.append(", DueSlotProcessingTime: "); sb.append(smscStatProvider.getDueSlotProcessingTime()); sb.append(", Param1: "); sb.append(smscStatProvider.getParam1()); sb.append(", Param2: "); sb.append(smscStatProvider.getParam2()); sb.append(", SmscStartTime: "); sb.append(smscStatProvider.getSmscStartTime()); String s1 = SmsSetCache.getInstance().getLstSmsSetWithBigMessageCountState(); if (s1 != null) { sb.append("\nLstSmsSetWithBigMessageCountState:\n"); sb.append(s1); } return sb.toString(); } public String updateCcMccmnstable(String[] args) { HomeRoutingManagement homeRoutingManagement = HomeRoutingManagement.getInstance(); if (homeRoutingManagement != null) homeRoutingManagement.updateCcMccmncTable(); return SMSCOAMMessages.CORRELATION_TABLE_HAS_BE_LOADED; } /** * Home Routing management. Commands are * * smsc hrccmccmnc add <cc> <mccmnc> smscgt <smscgt> * smsc hrccmccmnc modify <cc> <mccmnc> smscgt <smscgt> * smsc hrccmccmnc remove <cc> * smsc hrccmccmnc show * @param args * @return * @throws Exception */ public String ccMccmnsValueUpdate(String[] args) throws Exception { if (args.length < 3 || args.length > 7) { return SMSCOAMMessages.INVALID_COMMAND; } HomeRoutingManagement homeRoutingManagement = HomeRoutingManagement.getInstance(); if (homeRoutingManagement == null) return SMSCOAMMessages.HR_ABSENT; String cmd = args[2]; String cc = null; if (args.length >= 4) { cc = args[3]; if (cc == null) return SMSCOAMMessages.INVALID_COMMAND; } if (cmd.equals("add")) { if (args.length < 5) return SMSCOAMMessages.INVALID_COMMAND; String mccmnc = args[4]; String smsc = null; if (args.length >= 7 && args[5] != null && args[5].equals("smscgt")) { smsc = args[6]; if (smsc != null && smsc.equals("-1")) smsc = null; } homeRoutingManagement.addCcMccmnc(cc, mccmnc, smsc); return SMSCOAMMessages.HR_CCMCCMNC_ADDED; } else if (cmd.equals("modify")) { if (args.length < 5) return SMSCOAMMessages.INVALID_COMMAND; String mccmnc = args[4]; String smsc = null; if (args.length >= 7 && args[5] != null && args[5].equals("smscgt")) { smsc = args[6]; if (smsc != null && smsc.equals("-1")) smsc = null; } homeRoutingManagement.modifyCcMccmnc(cc, mccmnc, smsc); return SMSCOAMMessages.HR_CCMCCMNC_MODIFIED; } else if (cmd.equals("remove")) { homeRoutingManagement.removeCcMccmnc(cc); return SMSCOAMMessages.HR_CCMCCMNC_REMOVED; } else if (cmd.equals("show")) { if (cc == null) { Map<String, CcMccmncImpl> map = homeRoutingManagement.getCcMccmncMap(); StringBuilder sb = new StringBuilder(); sb.append(SMSCOAMMessages.HR_CCMCCMNC_COLL); for (CcMccmncImpl val : map.values()) { sb.append(val.toString()); sb.append("\n"); } sb.append("]"); return sb.toString(); } else { CcMccmncImpl ccMccmnc = (CcMccmncImpl) homeRoutingManagement.getCcMccmnc(cc); if (ccMccmnc != null) { return ccMccmnc.toString(); } else { return String.format(SMSCOAMMessages.HR_CCMCCMNC_NOTFOUND, cc); } } } else { return SMSCOAMMessages.INVALID_COMMAND; } } public String execute(String[] args) { if (args[0].equals("smsc")) { return this.executeSmsc(args); } return SMSCOAMMessages.INVALID_COMMAND; } @Override public boolean handles(String command) { return "smsc".equals(command); } public static void main(String[] args) throws Exception { String command = "smsc mapcache get 1234567"; SMSCShellExecutor exec = new SMSCShellExecutor(); exec.getMapVersionCache(command.split(" ")); } } //smsc homeroute add <countrycode> <mccmnc> smscgt <smsc-gt> //smsc homeroute modify <countrycode> <mccmnc> smscgt <smsc-gt> //smsc homeroute delete <countrycode> //smsc homeroute show <mccmnc>