Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

REQ-201 One ESME in Many Clusters #25

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
27 changes: 19 additions & 8 deletions .gitignore
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,23 @@
.idea
*.iml

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
/.classpath
.classpath

# Maven
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties

# Eclipse
.project
/.project
target
/target/
/.settings/
.classpath
.settings
.checkstyle

# JBoss
${env.JBOSS_HOME}
Empty file modified core/bootstrap-wildfly/pom.xml
100644 → 100755
Empty file.
Empty file modified core/bootstrap/pom.xml
100644 → 100755
Empty file.
Empty file modified core/oam/clismpp/pom.xml
100644 → 100755
Empty file.
Empty file modified core/pom.xml
100644 → 100755
Empty file.
Empty file modified core/smpp-extensions/pom.xml
100644 → 100755
Empty file.
75 changes: 70 additions & 5 deletions core/smpp-extensions/src/main/java/org/restcomm/smpp/Esme.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,10 @@ public class Esme extends SslConfigurationWrapper implements XMLSerializable, Es
*
*/
private static final long serialVersionUID = 1L;

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

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

private static final String SEPARATOR = ",";

private static final String ESME_NAME = "name";

Expand All @@ -63,6 +65,7 @@ public class Esme extends SslConfigurationWrapper implements XMLSerializable, Es
private static final String REMOTE_HOST_IP = "host";
private static final String REMOTE_HOST_PORT = "port";
private static final String NETWORK_ID = "networkId";
private static final String NETWORK_IDS = "networkIds";
private static final String SPLIT_LONG_MESSAGES = "splitLongMessages";
private static final String SMPP_BIND_TYPE = "smppBindType";

Expand Down Expand Up @@ -118,6 +121,7 @@ public class Esme extends SslConfigurationWrapper implements XMLSerializable, Es
private String systemType;
private SmppInterfaceVersionType smppVersion = null;
private int networkId;
private int[] networkIds;
// long messages will be split before sending to this destination
private boolean splitLongMessages;

Expand Down Expand Up @@ -341,7 +345,7 @@ public Esme(String name, String systemId, String password, String host, int port
this.routingAddressRangePattern = Pattern.compile(this.routingAddressRange);
}

this.networkId = networkId;
this.networkId = networkId;
this.splitLongMessages = splitLongMessages;

this.rateLimitPerSecond = rateLimitPerSecond;
Expand All @@ -354,6 +358,7 @@ public Esme(String name, String systemId, String password, String host, int port
this.destAddrSendLimit = destAddrSendLimit;
this.minMessageLength = minMessageLength;
this.maxMessageLength = maxMessageLength;
networkIds = convert(networkId);
}

/**
Expand Down Expand Up @@ -1062,6 +1067,7 @@ public void read(javolution.xml.XMLFormat.InputElement xml, Esme esme) throws XM
esme.host = xml.getAttribute(REMOTE_HOST_IP, "");
esme.port = xml.getAttribute(REMOTE_HOST_PORT, -1);
esme.networkId = xml.getAttribute(NETWORK_ID, 0);
esme.networkIds = convert(xml.getAttribute(NETWORK_IDS, String.valueOf(esme.networkId)), esme.networkId);
esme.splitLongMessages = xml.getAttribute(SPLIT_LONG_MESSAGES, false);

esme.rateLimitPerSecond = xml.getAttribute(RATE_LIMIT_PER_SECOND, 0L);
Expand Down Expand Up @@ -1170,6 +1176,7 @@ public void write(Esme esme, javolution.xml.XMLFormat.OutputElement xml) throws
xml.setAttribute(REMOTE_HOST_IP, esme.host);
xml.setAttribute(REMOTE_HOST_PORT, esme.port);
xml.setAttribute(NETWORK_ID, esme.networkId);
xml.setAttribute(NETWORK_IDS, convert(esme.networkIds, esme.networkId));
xml.setAttribute(SPLIT_LONG_MESSAGES, esme.splitLongMessages);

xml.setAttribute(RATE_LIMIT_PER_SECOND, esme.rateLimitPerSecond);
Expand Down Expand Up @@ -1256,8 +1263,9 @@ public void show(StringBuffer sb) {
.append(this.systemId).append(SmppOamMessages.SHOW_ESME_STATE).append(this.getStateName())
.append(SmppOamMessages.SHOW_ESME_PASSWORD).append(this.password).append(SmppOamMessages.SHOW_ESME_HOST)
.append(this.host).append(SmppOamMessages.SHOW_ESME_PORT).append(this.port)
.append(SmppOamMessages.SHOW_NETWORK_ID).append(this.networkId).append(SmppOamMessages.CHARGING_ENABLED)
.append(this.chargingEnabled).append(SmppOamMessages.SHOW_ESME_BIND_TYPE).append(this.smppBindType)
.append(SmppOamMessages.SHOW_NETWORK_IDS).append(convert(networkIds, networkId))
.append(SmppOamMessages.CHARGING_ENABLED) .append(this.chargingEnabled)
.append(SmppOamMessages.SHOW_ESME_BIND_TYPE).append(this.smppBindType)
.append(SmppOamMessages.SHOW_ESME_SYSTEM_TYPE).append(this.systemType)
.append(SmppOamMessages.SHOW_ESME_INTERFACE_VERSION).append(this.smppVersion)
.append(SmppOamMessages.SHOW_ADDRESS_TON).append(this.esmeTon).append(SmppOamMessages.SHOW_ADDRESS_NPI)
Expand Down Expand Up @@ -1792,4 +1800,61 @@ public boolean equals(Object obj) {
public void store() {
this.esmeManagement.store();
}

/**
* Gets the network IDs.
*
* @return the network IDs
*/
int[] getNetworkIds() {
return networkIds;
}

/**
* Sets the network IDs.
*
* @param aNetworkIds the new network IDs
*/
void setNetworkIds(final int[] aNetworkIds) {
networkIds = aNetworkIds;
}

private static String convert(final int[] anIntArray, final int aSingleValue) {
if (anIntArray == null) {
return String.valueOf(aSingleValue);
}
if (anIntArray.length == 0) {
return String.valueOf(aSingleValue);
}
if (anIntArray.length == 1) {
return String.valueOf(anIntArray[0]);
}
final StringBuilder sb = new StringBuilder().append(anIntArray[0]);
for (int i = 1; i < anIntArray.length; i++) {
sb.append(SEPARATOR).append(anIntArray[i]);
}
return sb.toString();
}

private static int[] convert(final String aListOfIntegerValues, final int aSingleValue) {
if (aListOfIntegerValues == null) {
return convert(aSingleValue);
}
if (aListOfIntegerValues.isEmpty()) {
return convert(aSingleValue);
}
final String[] values = aListOfIntegerValues.split(SEPARATOR);
final int[] r = new int[values.length];
for (int i = 0; i < values.length; i++) {
r[i] = Integer.parseInt(values[i]);
}
return r;
}

private static int[] convert(final int aSingleNetworkId) {
final int[] r = new int[1];
r[0] = aSingleNetworkId;
return r;
}

}
37 changes: 37 additions & 0 deletions core/smpp-extensions/src/main/java/org/restcomm/smpp/EsmeCluster.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,41 @@ synchronized Esme getNextEsme() {
boolean hasMoreEsmes() {
return (esmes.size() > 0);
}

/**
* Checks if is OK for given request parameters.
*
* @param aTon the TON
* @param anNpi the NPI
* @param anAddress the address
* @param aName the a name
* @return true, if is OK for give parameters
*/
public boolean isOkFor(final int aTon, final int anNpi, final String anAddress, final String aName) {
for (FastList.Node<Esme> n = esmesToSendPdu.head(), end = esmesToSendPdu.tail(); (n = n.getNext()) != end;) {
final Esme esme = n.getValue();
if (esme.getName().equals(aName)) {
continue;
}
if (esme.isRoutingAddressMatching(aTon, anNpi, anAddress)) {
return true;
}
}
return false;
}

@Override
public String toString() {
final int count = esmes.size();
final StringBuilder sb = new StringBuilder();
sb.append(clusterName).append("[");
for (int i = 0; i < count; i++) {
sb.append(esmes.get(i).getName());
if (i < count - 1) {
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}
Loading