2 new revisions:
Revision: 88f48f1cb4d0
Author: Sergey Vetyutnev <[email protected]>
Date: Sun Dec 9 02:18:20 2012
Log: Prevent SCCP stack from a crash after config files structure
changed
http://code.google.com/p/jss7/source/detail?r=88f48f1cb4d0
Revision: b43741bde0fc
Author: Sergey Vetyutnev <[email protected]>
Date: Mon Dec 10 02:52:46 2012
Log: Merge remote-tracking branch 'origin/sccp' into SCCP_198
http://code.google.com/p/jss7/source/detail?r=b43741bde0fc
==============================================================================
Revision: 88f48f1cb4d0
Author: Sergey Vetyutnev <[email protected]>
Date: Sun Dec 9 02:18:20 2012
Log: Prevent SCCP stack from a crash after config files structure
changed
http://code.google.com/p/jss7/source/detail?r=88f48f1cb4d0
Modified:
/sccp/sccp-impl/src/main/java/org/mobicents/protocols/ss7/sccp/impl/SccpResourceImpl.java
/sccp/sccp-impl/src/main/java/org/mobicents/protocols/ss7/sccp/impl/router/RouterImpl.java
=======================================
---
/sccp/sccp-impl/src/main/java/org/mobicents/protocols/ss7/sccp/impl/SccpResourceImpl.java
Thu Dec 6 03:29:38 2012
+++
/sccp/sccp-impl/src/main/java/org/mobicents/protocols/ss7/sccp/impl/SccpResourceImpl.java
Sun Dec 9 02:18:20 2012
@@ -22,14 +22,21 @@
package org.mobicents.protocols.ss7.sccp.impl;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
import java.util.Map;
import javolution.text.TextBuilder;
import javolution.util.FastMap;
+import javolution.xml.XMLBinding;
import javolution.xml.XMLObjectReader;
import javolution.xml.XMLObjectWriter;
import javolution.xml.stream.XMLStreamException;
@@ -98,11 +105,7 @@
logger.info(String.format("SCCP Resource configuration file path %s",
persistFile.toString()));
- try {
- this.load();
- } catch (FileNotFoundException e) {
- logger.warn(String.format("Failed to load the SS7 configuration file.
\n%s", e.getMessage()));
- }
+ this.load();
logger.info("Started Sccp Resource");
}
@@ -365,19 +368,109 @@
*
* @throws Exception
*/
- private void load() throws FileNotFoundException {
+ private void load() {
- XMLObjectReader reader = null;
try {
- reader = XMLObjectReader.newInstance(new
FileInputStream(persistFile.toString()));
+ File f = new File(persistFile.toString());
+ if (f.exists()) {
+ // we have V3 config
+ loadVer3(persistFile.toString());
+ } else {
+ String s1 = persistFile.toString().replace("2.xml",
".xml");
+ f = new File(s1);
+
+ if (f.exists()) {
+ if (!loadVer1(s1)) {
+ loadVer2(s1);
+ }
+ }
+
+ this.store();
+ f.delete();
+ }
+ } catch (XMLStreamException ex) {
+ logger.error(String.format("Failed to load the SS7 configuration file.
\n%s", ex.getMessage()));
+ } catch (FileNotFoundException e) {
+ logger.warn(String.format("Failed to load the SS7 configuration file.
\n%s", e.getMessage()));
+ } catch (IOException e) {
+ logger.error(String.format("Failed to load the SS7 configuration file.
\n%s", e.getMessage()));
+ }
+ }
+
+ private boolean loadVer1(String fn) throws XMLStreamException,
IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(new
FileInputStream(fn)));
+ StringBuilder sb = new StringBuilder();
+ while (true) {
+ String s1 = br.readLine();
+ if (s1 == null)
+ break;
+ sb.append(s1);
+ sb.append("\n");
+ }
+ br.close();
+ String s2 = sb.toString();
+ s2 = s2.replace("impl.RemoteSubSystem",
"impl.RemoteSubSystemImpl");
+ s2 =
s2.replace("impl.RemoteSignalingPointCode", "impl.RemoteSignalingPointCodeImpl");
+ s2 =
s2.replace("impl.ConcernedSignalingPointCode", "impl.ConcernedSignalingPointCodeImpl");
+
+ StringReader sr = new StringReader(s2);
+ XMLObjectReader reader = XMLObjectReader.newInstance(sr);
+
+ reader.setBinding(binding);
+
+ String REMOTE_SSN_V1 = "remoteSsn";
+ String REMOTE_SPC_V1 = "remoteSpc";
+ String CONCERNED_SPC_V1 = "concernedSpc";
+ XMLBinding binding2 = new XMLBinding();
+ binding2.setClassAttribute(CLASS_ATTRIBUTE);
+
+ FastMap<Integer, RemoteSubSystem> remoteSsnsX =
reader.read(REMOTE_SSN_V1, FastMap.class);
+ FastMap<Integer, RemoteSignalingPointCode> remoteSpcsX =
reader.read(REMOTE_SPC_V1, FastMap.class);
+ FastMap<Integer, ConcernedSignalingPointCode> concernedSpcsX =
reader.read(CONCERNED_SPC_V1, FastMap.class);
+
+ reader.close();
+
+ if (remoteSsnsX == null)
+ return false;
+
+ for (Integer id : remoteSsnsX.keySet()) {
+ RemoteSubSystem val = remoteSsnsX.get(id);
+ remoteSsns.put(id, val);
+ }
+
+ for (Integer id : remoteSpcsX.keySet()) {
+ RemoteSignalingPointCode val = remoteSpcsX.get(id);
+ remoteSpcs.put(id, val);
+ }
- reader.setBinding(binding);
- remoteSsns = reader.read(REMOTE_SSN,
RemoteSubSystemMap.class);
- remoteSpcs = reader.read(REMOTE_SPC,
RemoteSignalingPointCodeMap.class);
- concernedSpcs = reader.read(CONCERNED_SPC,
ConcernedSignalingPointCodeMap.class);
- } catch (XMLStreamException ex) {
- // this.logger.info(
- // "Error while re-creating Linksets from persisted
file", ex);
+ for (Integer id : concernedSpcsX.keySet()) {
+ ConcernedSignalingPointCode val =
concernedSpcsX.get(id);
+ concernedSpcs.put(id, val);
}
+
+ return true;
+ }
+
+ private void loadVer2(String fn) throws XMLStreamException,
FileNotFoundException {
+ XMLObjectReader reader = XMLObjectReader.newInstance(new
FileInputStream(fn));
+
+ reader.setBinding(binding);
+ remoteSsns = reader.read(REMOTE_SSN, RemoteSubSystemMap.class);
+ remoteSpcs = reader.read(REMOTE_SPC,
RemoteSignalingPointCodeMap.class);
+ concernedSpcs = reader.read(CONCERNED_SPC,
ConcernedSignalingPointCodeMap.class);
+
+ reader.close();
+ }
+
+ private void loadVer3(String fn) throws XMLStreamException,
FileNotFoundException {
+ XMLObjectReader reader = XMLObjectReader.newInstance(new
FileInputStream(fn));
+
+ reader.setBinding(binding);
+ remoteSsns = reader.read(REMOTE_SSN, RemoteSubSystemMap.class);
+ remoteSpcs = reader.read(REMOTE_SPC,
RemoteSignalingPointCodeMap.class);
+ concernedSpcs = reader.read(CONCERNED_SPC,
ConcernedSignalingPointCodeMap.class);
+
+ reader.close();
}
}
+
=======================================
---
/sccp/sccp-impl/src/main/java/org/mobicents/protocols/ss7/sccp/impl/router/RouterImpl.java
Thu Dec 6 23:59:09 2012
+++
/sccp/sccp-impl/src/main/java/org/mobicents/protocols/ss7/sccp/impl/router/RouterImpl.java
Sun Dec 9 02:18:20 2012
@@ -22,34 +22,46 @@
package org.mobicents.protocols.ss7.sccp.impl.router;
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.StringReader;
import java.util.Arrays;
import java.util.Map;
import javolution.text.TextBuilder;
import javolution.util.FastMap;
+import javolution.xml.XMLBinding;
import javolution.xml.XMLObjectReader;
import javolution.xml.XMLObjectWriter;
import javolution.xml.stream.XMLStreamException;
import org.apache.log4j.Logger;
+import org.mobicents.protocols.ss7.sccp.ConcernedSignalingPointCode;
import org.mobicents.protocols.ss7.sccp.LoadSharingAlgorithm;
import org.mobicents.protocols.ss7.sccp.LongMessageRule;
import org.mobicents.protocols.ss7.sccp.LongMessageRuleType;
import org.mobicents.protocols.ss7.sccp.Mtp3ServiceAccessPoint;
import org.mobicents.protocols.ss7.sccp.OriginationType;
+import org.mobicents.protocols.ss7.sccp.RemoteSignalingPointCode;
+import org.mobicents.protocols.ss7.sccp.RemoteSubSystem;
import org.mobicents.protocols.ss7.sccp.Router;
import org.mobicents.protocols.ss7.sccp.Rule;
import org.mobicents.protocols.ss7.sccp.RuleType;
import org.mobicents.protocols.ss7.sccp.SccpStack;
+import
org.mobicents.protocols.ss7.sccp.impl.ConcernedSignalingPointCodeMap;
+import org.mobicents.protocols.ss7.sccp.impl.RemoteSignalingPointCodeMap;
+import org.mobicents.protocols.ss7.sccp.impl.RemoteSubSystemMap;
import org.mobicents.protocols.ss7.sccp.impl.oam.SccpOAMMessage;
import org.mobicents.protocols.ss7.sccp.parameter.GT0001;
import org.mobicents.protocols.ss7.sccp.parameter.GT0010;
import org.mobicents.protocols.ss7.sccp.parameter.GT0011;
import org.mobicents.protocols.ss7.sccp.parameter.GT0100;
+import org.mobicents.protocols.ss7.sccp.parameter.NoGlobalTitle;
import org.mobicents.protocols.ss7.sccp.parameter.SccpAddress;
/**
@@ -233,6 +245,7 @@
binding.setAlias(GT0010.class, "GT0010");
binding.setAlias(GT0011.class, "GT0011");
binding.setAlias(GT0100.class, "GT0100");
+ binding.setAlias(NoGlobalTitle.class, "NoGlobalTitle");
}
public String getName() {
@@ -260,11 +273,7 @@
logger.info(String.format("SCCP Router configuration file path %s",
persistFile.toString()));
- try {
- this.load();
- } catch (FileNotFoundException e) {
- logger.warn(String.format("Failed to load the SS7 configuration file.
\n%s", e.getMessage()));
- }
+ this.load();
logger.info("Started SCCP Router");
}
@@ -798,22 +807,186 @@
*
* @throws Exception
*/
- public void load() throws FileNotFoundException {
+ private void load() {
- XMLObjectReader reader = null;
try {
- reader = XMLObjectReader.newInstance(new
FileInputStream(persistFile.toString()));
+ File f = new File(persistFile.toString());
+ if (f.exists()) {
+ // we have V3 config
+ loadVer3(persistFile.toString());
+ } else {
+ String s1 = persistFile.toString().replace("2.xml",
".xml");
+ f = new File(s1);
+
+ if (f.exists()) {
+ if (!loadVer1(s1)) {
+ loadVer2(s1);
+ }
+ }
+
+ this.store();
+ f.delete();
+ }
+ } catch (XMLStreamException ex) {
+ logger.error(String.format("Failed to load the SS7 configuration file.
\n%s", ex.getMessage()));
+ } catch (FileNotFoundException e) {
+ logger.warn(String.format("Failed to load the SS7 configuration file.
\n%s", e.getMessage()));
+ } catch (IOException e) {
+ logger.error(String.format("Failed to load the SS7 configuration file.
\n%s", e.getMessage()));
+ }
+ }
+
+ private void moveBackupToRoutingAddress(SccpAddressMap<Integer,
SccpAddress> backupAddresses) {
+ FastMap<Integer, Integer> lstChange = new FastMap<Integer,
Integer>();
+ for (Integer bId : backupAddresses.keySet()) {
+ SccpAddress addr = backupAddresses.get(bId);
+
+ int i1 = bId + 100;
+ while (true) {
+ if (routingAddresses.get(i1) == null)
+ break;
+ i1++;
+ }
+ routingAddresses.putEntry(i1, addr);
+ lstChange.putEntry(bId, i1);
+ }
+
+ for (Rule rule : rulesMap.values()) {
+ Integer newVal =
lstChange.get(rule.getSecondaryAddressId());
+ if (newVal != null) {
+ ((RuleImpl) rule).setSecondaryAddressId(newVal);
+ }
+ }
+ }
+
+ private boolean loadVer1(String fn) throws XMLStreamException,
IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(new
FileInputStream(fn)));
+ StringBuilder sb = new StringBuilder();
+ while (true) {
+ String s1 = br.readLine();
+ if (s1 == null)
+ break;
+ sb.append(s1);
+ sb.append("\n");
+ }
+ br.close();
+ String s2 = sb.toString();
+ s2 =
s2.replace("type=\"org.mobicents.protocols.ss7.sccp.parameter.NoGlobalTitle\"", "type=\"NoGlobalTitle\"");
+
+ s2 = s2.replace("type=\"rule\"", "");
+ s2 = s2.replace("pattern
type=\"org.mobicents.protocols.ss7.sccp.parameter.SccpAddress\"", "patternSccpAddress");
+ s2 = s2.replace("ai
type=\"org.mobicents.protocols.ss7.indicator.AddressIndicator\" ai=", "ai
value=");
+ s2 = s2.replace("gt
type=\"org.mobicents.protocols.ss7.sccp.parameter.", "gt type=\"");
+ s2 = s2.replace("Key type=\"java.lang.Integer\"", "id");
+ s2 = s2.replace("Value", "value");
+ s2 = s2.replace("/pattern", "/patternSccpAddress");
+ s2 = s2.replace("value
type=\"org.mobicents.protocols.ss7.sccp.parameter.SccpAddress\"", "sccpAddress");
+ s2 =
s2.replace("</value>\r\n</primaryAddress>", "</sccpAddress>\r\n</primaryAddress>");
+ s2 =
s2.replace("</value>\n</primaryAddress>", "</sccpAddress>\n</primaryAddress>");
+ s2 =
s2.replace("</value>\r\n</backupAddress>", "</sccpAddress>\r\n</backupAddress>");
+ s2 =
s2.replace("</value>\n</backupAddress>", "</sccpAddress>\n</backupAddress>");
+ s2 =
s2.replace("type=\"org.mobicents.protocols.ss7.sccp.parameter.", "type=\"");
+ s2 =
s2.replace("type=\"org.mobicents.protocols.ss7.sccp.impl.router.Mtp3ServiceAccessPoint\"", "");
+ s2 = s2.replace("javolution.util.FastMap",
"mtp3DestinationMap");
+ s2 =
s2.replace("type=\"org.mobicents.protocols.ss7.sccp.impl.router.Mtp3Destination\"", "");
+// s2 = s2.replace("", "");
+
+ StringReader sr = new StringReader(s2);
+ XMLObjectReader reader = XMLObjectReader.newInstance(sr);
- reader.setBinding(binding);
+ reader.setBinding(binding);
+
+// String REMOTE_SSN_V1 = "remoteSsn";
+// String REMOTE_SPC_V1 = "remoteSpc";
+// String CONCERNED_SPC_V1 = "concernedSpc";
+ XMLBinding binding2 = new XMLBinding();
+ binding2.setClassAttribute(CLASS_ATTRIBUTE);
+
+ String BACKUP_ADDRESS_V2 = "backupAddress";
+ String ROUTING_ADDRESS_V2 = "primaryAddress";
+
+ try {
rulesMap = reader.read(RULE, RuleMap.class);
- routingAddresses = reader.read(ROUTING_ADDRESS,
SccpAddressMap.class);
-// backupAddresses = reader.read(BACKUP_ADDRESS,
SccpAddressMap.class);
+ } catch (XMLStreamException e) {
+ return false;
+ }
+ routingAddresses = reader.read(ROUTING_ADDRESS_V2,
SccpAddressMap.class);
+ SccpAddressMap<Integer, SccpAddress> backupAddresses =
reader.read(BACKUP_ADDRESS_V2, SccpAddressMap.class);
- longMessageRules = reader.read(LONG_MESSAGE_RULE,
LongMessageRuleMap.class);
- saps = reader.read(MTP3_SERVICE_ACCESS_POINT,
Mtp3ServiceAccessPointMap.class);
- } catch (XMLStreamException ex) {
- // this.logger.info(
- // "Error while re-creating Linksets from persisted
file", ex);
+ longMessageRules = reader.read(LONG_MESSAGE_RULE,
LongMessageRuleMap.class);
+ saps = reader.read(MTP3_SERVICE_ACCESS_POINT,
Mtp3ServiceAccessPointMap.class);
+
+ reader.close();
+
+ moveBackupToRoutingAddress(backupAddresses);
+
+ return true;
+ }
+
+ private void loadVer2(String fn) throws XMLStreamException, IOException
{
+ BufferedReader br = new BufferedReader(new InputStreamReader(new
FileInputStream(fn)));
+ StringBuilder sb = new StringBuilder();
+ while (true) {
+ String s1 = br.readLine();
+ if (s1 == null)
+ break;
+ sb.append(s1);
+ sb.append("\n");
}
+ br.close();
+ String s2 = sb.toString();
+ s2 =
s2.replace("type=\"org.mobicents.protocols.ss7.sccp.parameter.NoGlobalTitle\"", "type=\"NoGlobalTitle\"");
+
+ StringReader sr = new StringReader(s2);
+ XMLObjectReader reader = XMLObjectReader.newInstance(sr);
+
+ String ROUTING_ADDRESS_V2 = "primaryAddress";
+ String BACKUP_ADDRESS_V2 = "backupAddress";
+
+ reader.setBinding(binding);
+ rulesMap = reader.read(RULE, RuleMap.class);
+ routingAddresses = reader.read(ROUTING_ADDRESS_V2,
SccpAddressMap.class);
+ SccpAddressMap<Integer, SccpAddress> backupAddresses =
reader.read(BACKUP_ADDRESS_V2, SccpAddressMap.class);
+
+ longMessageRules = reader.read(LONG_MESSAGE_RULE,
LongMessageRuleMap.class);
+ saps = reader.read(MTP3_SERVICE_ACCESS_POINT,
Mtp3ServiceAccessPointMap.class);
+
+ reader.close();
+
+ moveBackupToRoutingAddress(backupAddresses);
}
+
+ private void loadVer3(String fn) throws XMLStreamException,
FileNotFoundException {
+ XMLObjectReader reader = XMLObjectReader.newInstance(new
FileInputStream(fn));
+
+ reader.setBinding(binding);
+ rulesMap = reader.read(RULE, RuleMap.class);
+ routingAddresses = reader.read(ROUTING_ADDRESS,
SccpAddressMap.class);
+
+ longMessageRules = reader.read(LONG_MESSAGE_RULE,
LongMessageRuleMap.class);
+ saps = reader.read(MTP3_SERVICE_ACCESS_POINT,
Mtp3ServiceAccessPointMap.class);
+
+ reader.close();
+ }
+
+
+
+// public void load() throws FileNotFoundException {
+//
+// XMLObjectReader reader = null;
+// try {
+// reader = XMLObjectReader.newInstance(new
FileInputStream(persistFile.toString()));
+//
+// reader.setBinding(binding);
+// rulesMap = reader.read(RULE, RuleMap.class);
+// routingAddresses = reader.read(ROUTING_ADDRESS,
SccpAddressMap.class);
+//// backupAddresses = reader.read(BACKUP_ADDRESS,
SccpAddressMap.class);
+//
+// longMessageRules = reader.read(LONG_MESSAGE_RULE,
LongMessageRuleMap.class);
+// saps = reader.read(MTP3_SERVICE_ACCESS_POINT,
Mtp3ServiceAccessPointMap.class);
+// } catch (XMLStreamException ex) {
+// // this.logger.info(
+// // "Error while re-creating Linksets from persisted
file", ex);
+// }
+// }
}
==============================================================================
Revision: b43741bde0fc
Author: Sergey Vetyutnev <[email protected]>
Date: Mon Dec 10 02:52:46 2012
Log: Merge remote-tracking branch 'origin/sccp' into SCCP_198
http://code.google.com/p/jss7/source/detail?r=b43741bde0fc